add more test cases to check invalid GitHub Enterprise base URL

This commit is contained in:
rhysd 2018-01-19 18:38:51 +09:00
parent 1265b4826d
commit 89582ba9d1
5 changed files with 47 additions and 16 deletions

View File

@ -166,3 +166,14 @@ func TestNoReleaseFound(t *testing.T) {
t.Fatal("Repo having no release should not be found")
}
}
func TestDetectFromBrokenGitHubEnterpriseURL(t *testing.T) {
up, err := NewUpdater(Config{APIToken: "hogehoge", EnterpriseBaseURL: "https://example.com"})
if err != nil {
t.Fatal(err)
}
_, ok, _ := up.DetectLatest("foo/bar")
if ok {
t.Fatal("Invalid GitHub Enterprise base URL should raise an error")
}
}

View File

@ -58,7 +58,7 @@ func (up *Updater) downloadDirectlyFromURL(assetURL string) (io.ReadCloser, erro
func (up *Updater) UpdateTo(rel *Release, cmdPath string) error {
src, redirectURL, err := up.api.Repositories.DownloadReleaseAsset(up.apiCtx, rel.RepoOwner, rel.RepoName, rel.AssetID)
if err != nil {
return err
return fmt.Errorf("Failed to call GitHub Releases API for getting an asset(ID: %d) for repository '%s/%s': %s", rel.AssetID, rel.RepoOwner, rel.RepoName, err)
}
if redirectURL != "" {
log.Println("Redirect URL was returned while trying to download a release asset from GitHub API. Falling back to downloading from asset URL directly:", redirectURL)

View File

@ -256,3 +256,17 @@ func TestBrokenAsset(t *testing.T) {
t.Fatal("Unexpected error:", err)
}
}
func TestBrokenGitHubEnterpriseURL(t *testing.T) {
up, err := NewUpdater(Config{APIToken: "hogehoge", EnterpriseBaseURL: "https://example.com"})
if err != nil {
t.Fatal(err)
}
err = up.UpdateTo(&Release{AssetURL: "https://example.com"}, "foo")
if err == nil {
t.Fatal("Invalid GitHub Enterprise base URL should raise an error")
}
if !strings.Contains(err.Error(), "Failed to call GitHub Releases API for getting an asset") {
t.Error("Unexpected error occurred:", err)
}
}

View File

@ -52,22 +52,21 @@ func NewUpdater(config Config) (*Updater, error) {
ctx := context.Background()
hc := newHTTPClient(ctx, token)
var client *github.Client
if config.EnterpriseBaseURL == "" {
client = github.NewClient(hc)
} else {
if token == "" {
return nil, errors.New("GitHub API token cannot be empty when releases are hosted on GitHub Enterprise instance")
}
u := config.EnterpriseUploadURL
if u == "" {
u = config.EnterpriseBaseURL
}
var err error
client, err = github.NewEnterpriseClient(config.EnterpriseBaseURL, u, hc)
if err != nil {
return nil, err
}
client := github.NewClient(hc)
return &Updater{client, ctx, hc}, nil
}
if token == "" {
return nil, errors.New("GitHub API token cannot be empty when releases are hosted on GitHub Enterprise instance")
}
u := config.EnterpriseUploadURL
if u == "" {
u = config.EnterpriseBaseURL
}
client, err := github.NewEnterpriseClient(config.EnterpriseBaseURL, u, hc)
if err != nil {
return nil, err
}
return &Updater{client, ctx, hc}, nil
}

View File

@ -58,3 +58,10 @@ func TestGitHubEnterpriseClientWithoutToken(t *testing.T) {
t.Fatal("Error should be reported because of empty token")
}
}
func TestGitHubEnterpriseClientInvalidURL(t *testing.T) {
_, err := NewUpdater(Config{APIToken: "hogehoge", EnterpriseBaseURL: ":this is not a URL"})
if err == nil {
t.Fatal("Invalid URL should raise an error")
}
}