Something went wrong. Try again.
Maps Linux distribution source packages to their upstream repositories, and through them to each other
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364package bulk
import ( "context" "net/http" "net/http/httptest" "testing"
"tangled.org/odd.computer/isomorph/internal/fetch")
func TestLookupGitHub(t *testing.T) { mux := http.NewServeMux() // GitHub answers a renamed repository with a 301 to its id-based URL; the client follows. mux.HandleFunc("/repos/bagder/curl", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/repositories/1", http.StatusMovedPermanently) }) mux.HandleFunc("/repositories/1", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`{"id":1,"full_name":"Curl/Curl"}`)) }) mux.HandleFunc("/repos/curl/curl", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(`{"id":1,"full_name":"curl/curl"}`)) }) mux.HandleFunc("/repos/gone/repo", func(w http.ResponseWriter, r *http.Request) { http.Error(w, `{"message":"Not Found"}`, http.StatusNotFound) }) mux.HandleFunc("/repos/limited/repo", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-RateLimit-Remaining", "0") w.Header().Set("X-RateLimit-Reset", "1700000000") http.Error(w, `{"message":"API rate limit exceeded"}`, http.StatusForbidden) }) srv := httptest.NewServer(mux) defer srv.Close() client := fetch.New(t.TempDir()) client.HTTP = srv.Client() client.MinInterval = 0 client.Retries = 0 client.Offline = false client.Tokens = map[string]string{} old := githubAPI githubAPI = srv.URL defer func() { githubAPI = old }() ctx := context.Background()
for _, c := range []struct { key, want string gone bool }{ {"github.com/bagder/curl", "github.com/curl/curl", false}, {"github.com/curl/curl", "github.com/curl/curl", false}, {"github.com/gone/repo", "github.com/gone/repo", true}, {"gitlab.com/gnutls/gnutls", "gitlab.com/gnutls/gnutls", false}, // other hosts pass through {"github.com/curl", "github.com/curl", false}, // not a repository } { got, gone, err := LookupGitHub(ctx, client, c.key) if err != nil || got != c.want || gone != c.gone { t.Errorf("%s: %q gone=%v err=%v, want %q gone=%v", c.key, got, gone, err, c.want, c.gone) } } if got, _, err := LookupGitHub(ctx, client, "github.com/limited/repo"); err == nil { t.Errorf("rate limit: expected an error, got %q", got) }}