package main import ( "fmt" "net/http" "reflect" "testing" ) func TestGoProxyProtocolParser(t *testing.T) { t.Run( "Return another expected struct on request go-get for existing module", func(t *testing.T) { expected := &GoProxyRequest{ URI: "idio.link/go/netaddr", Module: "idio.link/go/netaddr", ImportPath: "idio.link/go/netaddr", Host: "idio.link", RepoPath: "idio.link/netaddr", Repo: "netaddr", VersionMajor: "", Version: "", Op: GoProxyRequestNone, } module := "idio.link/go/netaddr" req, _ := http.NewRequest( "GET", fmt.Sprintf("https://%s?go-get=1", module), nil, ) actual := new(GoProxyRequest) parseGoProxyPath(req, actual) if !reflect.DeepEqual(actual, expected) { t.Errorf("\nexpected:\n%#v\n\nactual:\n%#v", expected, actual) } }, ) t.Run( "Return expected struct on request go-get for existing module", func(t *testing.T) { expected := &GoProxyRequest{ URI: "idio.link/go/netaddr/v2", Module: "idio.link/go/netaddr/v2", ImportPath: "idio.link/go/netaddr", Host: "idio.link", RepoPath: "idio.link/netaddr", Repo: "netaddr", VersionMajor: "v2", Version: "", Op: GoProxyRequestNone, } module := "idio.link/go/netaddr/v2" req, _ := http.NewRequest( "GET", fmt.Sprintf("https://%s?go-get=1", module), nil, ) actual := new(GoProxyRequest) parseGoProxyPath(req, actual) if !reflect.DeepEqual(actual, expected) { t.Errorf("\nexpected:\n%#v\n\nactual:\n%#v", expected, actual) } }, ) t.Run( "Returns expected struct on request @latest for existing module", func(t *testing.T) { expected := &GoProxyRequest{ URI: "idio.link/go/netaddr/v2/@latest", Module: "idio.link/go/netaddr/v2", ImportPath: "idio.link/go/netaddr", Host: "idio.link", RepoPath: "idio.link/netaddr", Repo: "netaddr", VersionMajor: "v2", Version: "", Op: GoProxyRequestLatest, } module := "idio.link/go/netaddr/v2" req, _ := http.NewRequest( "GET", fmt.Sprintf("https://%s/@latest", module), nil, ) actual := new(GoProxyRequest) parseGoProxyPath(req, actual) if !reflect.DeepEqual(actual, expected) { t.Errorf("\nexpected:\n%#v\n\nactual:\n%#v", expected, actual) } }, ) t.Run( "Returns expected struct on request @v/$version.info for existing module", func(t *testing.T) { expected := &GoProxyRequest{ URI: "idio.link/go/netaddr/v2/@v/v2.0.0.info", Module: "idio.link/go/netaddr/v2", ImportPath: "idio.link/go/netaddr", Host: "idio.link", RepoPath: "idio.link/netaddr", Repo: "netaddr", VersionMajor: "v2", Version: "v2.0.0", Extension: ".info", Op: GoProxyRequestInfo, } module := "idio.link/go/netaddr/v2" version := "v2.0.0" req, _ := http.NewRequest( "GET", fmt.Sprintf("https://%s/@v/%s.info", module, version), nil, ) actual := new(GoProxyRequest) parseGoProxyPath(req, actual) if !reflect.DeepEqual(actual, expected) { t.Errorf("\nexpected:\n%#v\n\nactual:\n%#v", expected, actual) } }, ) }