@@ -39,3 +39,81 @@ func TestMakeRemoteRegistryRequestOptionsAnonymousInsecure(t *testing.T) {
3939 gotOptionFnPtr := reflect .PointerTo (reflect .TypeOf (nameOpts [0 ]))
4040 require .Equal (t , expectedOptionFnPtr , gotOptionFnPtr )
4141}
42+
43+ func TestMakeRemoteRegistryRequestOptions_InsecureHTTPScheme (t * testing.T ) {
44+ t .Run ("insecure flag enables HTTP scheme for registry references" , func (t * testing.T ) {
45+ nameOpts , _ := MakeRemoteRegistryRequestOptions (nil , true , false )
46+ require .Len (t , nameOpts , 1 , "should return name.Insecure option" )
47+
48+ ref , err := name .ParseReference ("localhost:5000/repo:tag" , nameOpts ... )
49+ require .NoError (t , err )
50+ require .Equal (t , "http" , ref .Context ().Registry .Scheme (), "should use HTTP scheme with insecure flag" )
51+ })
52+
53+ t .Run ("secure mode uses HTTPS scheme" , func (t * testing.T ) {
54+ nameOpts , _ := MakeRemoteRegistryRequestOptions (nil , false , false )
55+ require .Len (t , nameOpts , 0 , "should return no name options" )
56+
57+ ref , err := name .ParseReference ("registry.example.com/repo:tag" , nameOpts ... )
58+ require .NoError (t , err )
59+ require .Equal (t , "https" , ref .Context ().Registry .Scheme (), "should use HTTPS scheme by default" )
60+ })
61+
62+ t .Run ("insecure flag works with localhost registry" , func (t * testing.T ) {
63+ nameOpts , _ := MakeRemoteRegistryRequestOptions (nil , true , false )
64+
65+ ref , err := name .ParseReference ("localhost:5000/deckhouse/install:v1.0.0" , nameOpts ... )
66+ require .NoError (t , err )
67+ require .Equal (t , "http" , ref .Context ().Registry .Scheme ())
68+ require .Equal (t , "localhost:5000" , ref .Context ().RegistryStr ())
69+ })
70+
71+ t .Run ("insecure flag works with IP-based registry" , func (t * testing.T ) {
72+ nameOpts , _ := MakeRemoteRegistryRequestOptions (nil , true , false )
73+
74+ ref , err := name .ParseReference ("192.168.1.100:5000/repo:tag" , nameOpts ... )
75+ require .NoError (t , err )
76+ require .Equal (t , "http" , ref .Context ().Registry .Scheme ())
77+ })
78+ }
79+
80+ func TestMakeRemoteRegistryRequestOptions_TLSSkipVerify (t * testing.T ) {
81+ t .Run ("TLS skip verify creates custom transport" , func (t * testing.T ) {
82+ _ , remoteOpts := MakeRemoteRegistryRequestOptions (nil , false , true )
83+ require .Len (t , remoteOpts , 3 , "should have 3 remote options: transport + puller + pusher" )
84+ })
85+
86+ t .Run ("both insecure and TLS skip verify" , func (t * testing.T ) {
87+ nameOpts , remoteOpts := MakeRemoteRegistryRequestOptions (nil , true , true )
88+ require .Len (t , nameOpts , 1 , "should have name.Insecure option" )
89+ require .Len (t , remoteOpts , 3 , "should have transport + puller + pusher options" )
90+ })
91+
92+ t .Run ("secure mode without TLS skip" , func (t * testing.T ) {
93+ nameOpts , remoteOpts := MakeRemoteRegistryRequestOptions (nil , false , false )
94+ require .Len (t , nameOpts , 0 , "should have no name options" )
95+ require .Len (t , remoteOpts , 2 , "should have only puller + pusher options" )
96+ })
97+ }
98+
99+ func TestMakeRemoteRegistryRequestOptions_RegressionTest (t * testing.T ) {
100+ t .Run ("insecure flag must be passed to name.ParseReference" , func (t * testing.T ) {
101+ nameOpts , _ := MakeRemoteRegistryRequestOptions (nil , true , false )
102+
103+ require .NotEmpty (t , nameOpts , "name options must not be empty when insecure=true" )
104+
105+ ref , err := name .ParseReference ("localhost:5000/deckhouse/ee:v1.63.0" , nameOpts ... )
106+ require .NoError (t , err , "should parse reference with insecure option" )
107+ require .Equal (t , "http" , ref .Context ().Registry .Scheme (),
108+ "REGRESSION: insecure flag must result in HTTP scheme, not HTTPS" )
109+ })
110+
111+ t .Run ("without insecure flag remote registry defaults to HTTPS" , func (t * testing.T ) {
112+ nameOpts , _ := MakeRemoteRegistryRequestOptions (nil , false , false )
113+
114+ ref , err := name .ParseReference ("registry.example.com:5000/repo:tag" , nameOpts ... )
115+ require .NoError (t , err )
116+ require .Equal (t , "https" , ref .Context ().Registry .Scheme (),
117+ "without insecure flag, remote registry should default to HTTPS" )
118+ })
119+ }
0 commit comments