@@ -10,6 +10,7 @@ import (
1010 "strings"
1111 "testing"
1212
13+ oapi "github.com/kernel/kernel-images/server/lib/oapi"
1314 "github.com/stretchr/testify/require"
1415)
1516
@@ -33,31 +34,69 @@ func TestChromiumConfigureModeFor(t *testing.T) {
3334 stringPtr := func (value string ) * string { return & value }
3435
3536 tests := []struct {
36- name string
37- state chromiumConfigureState
38- want chromiumConfigureMode
37+ name string
38+ state chromiumConfigureState
39+ strategy oapi.ChromiumConfigureParamsExtensionLoadStrategy
40+ want chromiumConfigureMode
3941 }{
40- {name : "no restart fields" , want : chromiumConfigureModeLive },
41- {name : "display only" , state : chromiumConfigureState {displayJSON : stringPtr (`{"width":1280}` )}, want : chromiumConfigureModeLive },
42- {name : "start URL only" , state : chromiumConfigureState {startURLRaw : stringPtr ("https://example.com" )}, want : chromiumConfigureModeLive },
43- {name : "empty policies" , state : chromiumConfigureState {chromePoliciesJSON : stringPtr (`{}` )}, want : chromiumConfigureModeLive },
44- {name : "nonempty policies" , state : chromiumConfigureState {chromePoliciesJSON : stringPtr (`{"QuicAllowed":false}` )}, want : chromiumConfigureModeRestart },
45- {name : "invalid policies" , state : chromiumConfigureState {chromePoliciesJSON : stringPtr (`{bad-json` )}, want : chromiumConfigureModeRestart },
46- {name : "empty flags" , state : chromiumConfigureState {chromiumFlagsJSON : stringPtr (`{"flags":[]}` )}, want : chromiumConfigureModeLive },
47- {name : "nonempty flags" , state : chromiumConfigureState {chromiumFlagsJSON : stringPtr (`{"flags":["--kiosk"]}` )}, want : chromiumConfigureModeRestart },
48- {name : "invalid flags" , state : chromiumConfigureState {chromiumFlagsJSON : stringPtr (`{bad-json` )}, want : chromiumConfigureModeRestart },
49- {name : "profile" , state : chromiumConfigureState {hasProfile : true }, want : chromiumConfigureModeRestart },
50- {name : "extensions" , state : chromiumConfigureState {extItems : []extensionZipItem {{name : "test" }}}, want : chromiumConfigureModeRestart },
51- {name : "display and extension" , state : chromiumConfigureState {displayJSON : stringPtr (`{"width":1280}` ), extItems : []extensionZipItem {{name : "test" }}}, want : chromiumConfigureModeRestart },
42+ {name : "no restart fields" , strategy : oapi .Restart , want : chromiumConfigureModeLive },
43+ {name : "display only" , state : chromiumConfigureState {displayJSON : stringPtr (`{"width":1280}` )}, strategy : oapi .Restart , want : chromiumConfigureModeLive },
44+ {name : "start URL only" , state : chromiumConfigureState {startURLRaw : stringPtr ("https://example.com" )}, strategy : oapi .Restart , want : chromiumConfigureModeLive },
45+ {name : "empty policies" , state : chromiumConfigureState {chromePoliciesJSON : stringPtr (`{}` )}, strategy : oapi .Restart , want : chromiumConfigureModeLive },
46+ {name : "nonempty policies" , state : chromiumConfigureState {chromePoliciesJSON : stringPtr (`{"QuicAllowed":false}` )}, strategy : oapi .PreferCdp , want : chromiumConfigureModeRestart },
47+ {name : "invalid policies" , state : chromiumConfigureState {chromePoliciesJSON : stringPtr (`{bad-json` )}, strategy : oapi .PreferCdp , want : chromiumConfigureModeRestart },
48+ {name : "empty flags" , state : chromiumConfigureState {chromiumFlagsJSON : stringPtr (`{"flags":[]}` )}, strategy : oapi .Restart , want : chromiumConfigureModeLive },
49+ {name : "nonempty flags" , state : chromiumConfigureState {chromiumFlagsJSON : stringPtr (`{"flags":["--kiosk"]}` )}, strategy : oapi .PreferCdp , want : chromiumConfigureModeRestart },
50+ {name : "invalid flags" , state : chromiumConfigureState {chromiumFlagsJSON : stringPtr (`{bad-json` )}, strategy : oapi .PreferCdp , want : chromiumConfigureModeRestart },
51+ {name : "profile" , state : chromiumConfigureState {hasProfile : true }, strategy : oapi .PreferCdp , want : chromiumConfigureModeRestart },
52+ {name : "extensions default restart" , state : chromiumConfigureState {extItems : []extensionZipItem {{name : "test" }}}, strategy : oapi .Restart , want : chromiumConfigureModeRestart },
53+ {name : "extensions prefer CDP" , state : chromiumConfigureState {extItems : []extensionZipItem {{name : "test" }}}, strategy : oapi .PreferCdp , want : chromiumConfigureModeCandidateCDPExtensions },
54+ {name : "display and extensions prefer CDP" , state : chromiumConfigureState {displayJSON : stringPtr (`{"width":1280}` ), extItems : []extensionZipItem {{name : "test" }}}, strategy : oapi .PreferCdp , want : chromiumConfigureModeCandidateCDPExtensions },
5255 }
5356
5457 for _ , tt := range tests {
5558 t .Run (tt .name , func (t * testing.T ) {
56- require .Equal (t , tt .want , chromiumConfigureModeFor (& tt .state ))
59+ require .Equal (t , tt .want , chromiumConfigureModeFor (& tt .state , tt . strategy ))
5760 })
5861 }
5962}
6063
64+ func TestChromiumConfigureExtensionLoadStrategy (t * testing.T ) {
65+ strategy , msg := chromiumConfigureExtensionLoadStrategy (oapi.ChromiumConfigureParams {})
66+ require .Empty (t , msg )
67+ require .Equal (t , oapi .Restart , strategy )
68+
69+ preferCDP := oapi .PreferCdp
70+ strategy , msg = chromiumConfigureExtensionLoadStrategy (oapi.ChromiumConfigureParams {ExtensionLoadStrategy : & preferCDP })
71+ require .Empty (t , msg )
72+ require .Equal (t , oapi .PreferCdp , strategy )
73+
74+ invalid := oapi .ChromiumConfigureParamsExtensionLoadStrategy ("invalid" )
75+ _ , msg = chromiumConfigureExtensionLoadStrategy (oapi.ChromiumConfigureParams {ExtensionLoadStrategy : & invalid })
76+ require .Equal (t , "extension_load_strategy must be restart or prefer_cdp" , msg )
77+ }
78+
79+ func TestChromiumConfigureGeneratedClientQuery (t * testing.T ) {
80+ preferCDP := oapi .PreferCdp
81+ req , err := oapi .NewChromiumConfigureRequestWithBody (
82+ "http://example.test" ,
83+ & oapi.ChromiumConfigureParams {ExtensionLoadStrategy : & preferCDP },
84+ "multipart/form-data; boundary=test" ,
85+ strings .NewReader ("--test--" ),
86+ )
87+ require .NoError (t , err )
88+ require .Equal (t , "prefer_cdp" , req .URL .Query ().Get ("extension_load_strategy" ))
89+
90+ req , err = oapi .NewChromiumConfigureRequestWithBody (
91+ "http://example.test" ,
92+ nil ,
93+ "multipart/form-data; boundary=test" ,
94+ strings .NewReader ("--test--" ),
95+ )
96+ require .NoError (t , err )
97+ require .Empty (t , req .URL .RawQuery )
98+ }
99+
61100func TestChromiumConfigureActionables (t * testing.T ) {
62101 emptyFlags := `{"flags":[]}`
63102 realFlags := `{"flags":["--kiosk"]}`
0 commit comments