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  }