@@ -14,12 +14,51 @@ import (
1414
1515// MockPasswordReader for testing password prompting
1616type MockPasswordReader struct {
17- password string
18- err error
17+ passwords []string // passwords to return in sequence
18+ index int
19+ err error
1920}
2021
2122func (m * MockPasswordReader ) ReadPassword () (string , error ) {
22- return m .password , m .err
23+ if m .err != nil {
24+ return "" , m .err
25+ }
26+
27+ if len (m .passwords ) == 0 {
28+ return "" , nil
29+ }
30+
31+ pw := m .passwords [m .index ]
32+ if m .index < len (m .passwords )- 1 {
33+ m .index ++
34+ }
35+
36+ return pw , nil
37+ }
38+
39+ func (m * MockPasswordReader ) ReadPasswordWithConfirmation (prompt , confirmPrompt string ) (string , error ) {
40+ if m .err != nil {
41+ return "" , m .err
42+ }
43+
44+ if len (m .passwords ) < 2 {
45+ // Single password means both are the same (matching)
46+ if len (m .passwords ) == 1 {
47+ return m .passwords [0 ], nil
48+ }
49+
50+ return "" , nil
51+ }
52+
53+ pw1 := m .passwords [0 ]
54+ pw2 := m .passwords [1 ]
55+ m .index = 2
56+
57+ if pw1 != pw2 {
58+ return "" , utils .PasswordsDoNotMatch
59+ }
60+
61+ return pw1 , nil
2362}
2463
2564// MockPasswordRequirer for testing password requirements
@@ -35,9 +74,10 @@ func TestAMTBaseCmd_EnsureAMTPassword(t *testing.T) {
3574 tests := []struct {
3675 name string
3776 ctxPassword string
38- mockPassword string
77+ mockPasswords [] string
3978 mockError error
4079 requiresPass bool
80+ controlMode int
4181 expectedError bool
4282 expectedPass string
4383 }{
@@ -48,10 +88,25 @@ func TestAMTBaseCmd_EnsureAMTPassword(t *testing.T) {
4888 expectedPass : "existing-password" ,
4989 },
5090 {
51- name : "password prompted successfully" ,
52- mockPassword : "prompted-password" ,
53- requiresPass : true ,
54- expectedPass : "prompted-password" ,
91+ name : "password prompted successfully - activated device" ,
92+ mockPasswords : []string {"prompted-password" },
93+ requiresPass : true ,
94+ controlMode : 1 , // activated (CCM)
95+ expectedPass : "prompted-password" ,
96+ },
97+ {
98+ name : "password prompted successfully - not activated with matching confirmation" ,
99+ mockPasswords : []string {"new-password" , "new-password" },
100+ requiresPass : true ,
101+ controlMode : 0 , // not activated
102+ expectedPass : "new-password" ,
103+ },
104+ {
105+ name : "password mismatch - not activated device" ,
106+ mockPasswords : []string {"password1" , "password2" },
107+ requiresPass : true ,
108+ controlMode : 0 , // not activated
109+ expectedError : true ,
55110 },
56111 {
57112 name : "password prompting fails" ,
@@ -64,6 +119,13 @@ func TestAMTBaseCmd_EnsureAMTPassword(t *testing.T) {
64119 requiresPass : false ,
65120 expectedPass : "" ,
66121 },
122+ {
123+ name : "activated device ACM - single prompt" ,
124+ mockPasswords : []string {"acm-password" },
125+ requiresPass : true ,
126+ controlMode : 2 , // activated (ACM)
127+ expectedPass : "acm-password" ,
128+ },
67129 }
68130
69131 for _ , tt := range tests {
@@ -72,9 +134,9 @@ func TestAMTBaseCmd_EnsureAMTPassword(t *testing.T) {
72134
73135 defer func () { utils .PR = originalPR }()
74136
75- utils .PR = & MockPasswordReader {password : tt .mockPassword , err : tt .mockError }
137+ utils .PR = & MockPasswordReader {passwords : tt .mockPasswords , err : tt .mockError }
76138
77- cmd := & AMTBaseCmd {}
139+ cmd := & AMTBaseCmd {ControlMode : tt . controlMode }
78140 ctx := & Context {AMTPassword : tt .ctxPassword }
79141 requirer := & MockPasswordRequirer {requiresPassword : tt .requiresPass }
80142
@@ -89,6 +151,22 @@ func TestAMTBaseCmd_EnsureAMTPassword(t *testing.T) {
89151 }
90152}
91153
154+ func TestAMTBaseCmd_EnsureAMTPassword_PasswordsDoNotMatch (t * testing.T ) {
155+ originalPR := utils .PR
156+
157+ defer func () { utils .PR = originalPR }()
158+
159+ utils .PR = & MockPasswordReader {passwords : []string {"pass1" , "pass2" }}
160+
161+ cmd := & AMTBaseCmd {ControlMode : 0 } // not activated
162+ ctx := & Context {}
163+ requirer := & MockPasswordRequirer {requiresPassword : true }
164+
165+ err := cmd .EnsureAMTPassword (ctx , requirer )
166+ assert .Error (t , err )
167+ assert .ErrorIs (t , err , utils .PasswordsDoNotMatch )
168+ }
169+
92170func TestAMTBaseCmd_RequiresAMTPassword (t * testing.T ) {
93171 cmd := & AMTBaseCmd {}
94172 assert .True (t , cmd .RequiresAMTPassword (), "AMTBaseCmd should require password by default" )
0 commit comments