github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/api/types/registry/authconfig_test.go (about) 1 package registry // import "github.com/docker/docker/api/types/registry" 2 import ( 3 "io" 4 "strings" 5 "testing" 6 7 "gotest.tools/v3/assert" 8 ) 9 10 const ( 11 unencoded = `{"username":"testuser","password":"testpassword","serveraddress":"example.com"}` 12 encoded = `eyJ1c2VybmFtZSI6InRlc3R1c2VyIiwicGFzc3dvcmQiOiJ0ZXN0cGFzc3dvcmQiLCJzZXJ2ZXJhZGRyZXNzIjoiZXhhbXBsZS5jb20ifQ==` 13 encodedNoPadding = `eyJ1c2VybmFtZSI6InRlc3R1c2VyIiwicGFzc3dvcmQiOiJ0ZXN0cGFzc3dvcmQiLCJzZXJ2ZXJhZGRyZXNzIjoiZXhhbXBsZS5jb20ifQ` 14 ) 15 16 var expected = AuthConfig{ 17 Username: "testuser", 18 Password: "testpassword", 19 ServerAddress: "example.com", 20 } 21 22 func TestDecodeAuthConfig(t *testing.T) { 23 t.Run("valid", func(t *testing.T) { 24 token, err := DecodeAuthConfig(encoded) 25 assert.NilError(t, err) 26 assert.Equal(t, *token, expected) 27 }) 28 29 t.Run("empty", func(t *testing.T) { 30 token, err := DecodeAuthConfig("") 31 assert.NilError(t, err) 32 assert.Equal(t, *token, AuthConfig{}) 33 }) 34 35 // We currently only support base64url encoding with padding, so 36 // un-padded should produce an error. 37 // 38 // RFC4648, section 5: https://tools.ietf.org/html/rfc4648#section-5 39 // RFC4648, section 3.2: https://tools.ietf.org/html/rfc4648#section-3.2 40 t.Run("invalid encoding", func(t *testing.T) { 41 token, err := DecodeAuthConfig(encodedNoPadding) 42 43 assert.ErrorType(t, err, errInvalidParameter{}) 44 assert.ErrorContains(t, err, "invalid X-Registry-Auth header: unexpected EOF") 45 assert.Equal(t, *token, AuthConfig{}) 46 }) 47 } 48 49 func TestDecodeAuthConfigBody(t *testing.T) { 50 token, err := DecodeAuthConfigBody(io.NopCloser(strings.NewReader(unencoded))) 51 assert.NilError(t, err) 52 assert.Equal(t, *token, expected) 53 } 54 55 func TestEncodeAuthConfig(t *testing.T) { 56 token, err := EncodeAuthConfig(expected) 57 assert.NilError(t, err) 58 assert.Equal(t, token, encoded) 59 }