| // Copyright 2017 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package gerrit |
| |
| import ( |
| "context" |
| "net/http" |
| "net/http/httptest" |
| "net/url" |
| "testing" |
| "time" |
| ) |
| |
| // taken from https://go-review.googlesource.com/projects/go |
| var exampleProjectResponse = []byte(`)]}' |
| { |
| "id": "go", |
| "name": "go", |
| "parent": "All-Projects", |
| "description": "The Go Programming Language", |
| "state": "ACTIVE", |
| "web_links": [ |
| { |
| "name": "gitiles", |
| "url": "https://go.googlesource.com/go/", |
| "target": "_blank" |
| } |
| ] |
| } |
| `) |
| |
| func TestGetProjectInfo(t *testing.T) { |
| hitServer := false |
| path := "" |
| s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| hitServer = true |
| path = r.URL.Path |
| w.Header().Set("Content-Type", "application/json; charset=UTF-8") |
| w.WriteHeader(200) |
| w.Write(exampleProjectResponse) |
| })) |
| defer s.Close() |
| c := NewClient(s.URL, NoAuth) |
| info, err := c.GetProjectInfo(context.Background(), "go") |
| if err != nil { |
| t.Fatal(err) |
| } |
| if !hitServer { |
| t.Errorf("expected to hit test server, didn't") |
| } |
| if path != "/projects/go" { |
| t.Errorf("expected Path to be '/projects/go', got %s", path) |
| } |
| if info.Name != "go" { |
| t.Errorf("expected Name to be 'go', got %s", info.Name) |
| } |
| } |
| |
| func TestProjectNotFound(t *testing.T) { |
| s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| w.Header().Set("Content-Type", "text/plain; charset=UTF-8") |
| w.WriteHeader(404) |
| w.Write([]byte("Not found: unknown")) |
| })) |
| defer s.Close() |
| c := NewClient(s.URL, NoAuth) |
| _, err := c.GetProjectInfo(context.Background(), "unknown") |
| if err != ErrProjectNotExist { |
| t.Errorf("expected to get ErrProjectNotExist, got %v", err) |
| } |
| } |
| |
| func TestContextError(t *testing.T) { |
| c := NewClient("http://localhost", NoAuth) |
| yearsAgo, _ := time.Parse("2006", "2006") |
| ctx, cancel := context.WithDeadline(context.Background(), yearsAgo) |
| defer cancel() |
| _, err := c.GetProjectInfo(ctx, "unknown") |
| if err == nil { |
| t.Errorf("expected non-nil error, got nil") |
| } |
| uerr, ok := err.(*url.Error) |
| if !ok { |
| t.Errorf("expected url.Error, got %#v", err) |
| } |
| if uerr.Err != context.DeadlineExceeded { |
| t.Errorf("expected DeadlineExceeded error, got %v", uerr.Err) |
| } |
| } |