gitlabhq/gitlab-shell

View on GitHub
internal/command/healthcheck/healthcheck_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package healthcheck

import (
    "bytes"
    "context"
    "encoding/json"
    "net/http"
    "testing"

    "github.com/stretchr/testify/require"

    "gitlab.com/gitlab-org/gitlab-shell/v14/client/testserver"
    "gitlab.com/gitlab-org/gitlab-shell/v14/internal/command/readwriter"
    "gitlab.com/gitlab-org/gitlab-shell/v14/internal/config"
    "gitlab.com/gitlab-org/gitlab-shell/v14/internal/gitlabnet/healthcheck"
)

var (
    okResponse = &healthcheck.Response{
        APIVersion:     "v4",
        GitlabVersion:  "v12.0.0-ee",
        GitlabRevision: "3b13818e8330f68625d80d9bf5d8049c41fbe197",
        Redis:          true,
    }

    badRedisResponse = &healthcheck.Response{Redis: false}

    okHandlers       = buildTestHandlers(200, okResponse)
    badRedisHandlers = buildTestHandlers(200, badRedisResponse)
    brokenHandlers   = buildTestHandlers(500, nil)
)

func buildTestHandlers(code int, rsp *healthcheck.Response) []testserver.TestRequestHandler {
    return []testserver.TestRequestHandler{
        {
            Path: "/api/v4/internal/check",
            Handler: func(w http.ResponseWriter, r *http.Request) {
                w.WriteHeader(code)
                if rsp != nil {
                    json.NewEncoder(w).Encode(rsp)
                }
            },
        },
    }
}

func TestExecute(t *testing.T) {
    url := testserver.StartSocketHttpServer(t, okHandlers)

    buffer := &bytes.Buffer{}
    cmd := &Command{
        Config:     &config.Config{GitlabUrl: url},
        ReadWriter: &readwriter.ReadWriter{Out: buffer},
    }

    _, err := cmd.Execute(context.Background())

    require.NoError(t, err)
    require.Equal(t, "Internal API available: OK\nRedis available via internal API: OK\n", buffer.String())
}

func TestFailingRedisExecute(t *testing.T) {
    url := testserver.StartSocketHttpServer(t, badRedisHandlers)

    buffer := &bytes.Buffer{}
    cmd := &Command{
        Config:     &config.Config{GitlabUrl: url},
        ReadWriter: &readwriter.ReadWriter{Out: buffer},
    }

    _, err := cmd.Execute(context.Background())
    require.Error(t, err, "Redis available via internal API: FAILED")
    require.Equal(t, "Internal API available: OK\n", buffer.String())
}

func TestFailingAPIExecute(t *testing.T) {
    url := testserver.StartSocketHttpServer(t, brokenHandlers)

    buffer := &bytes.Buffer{}
    cmd := &Command{
        Config:     &config.Config{GitlabUrl: url},
        ReadWriter: &readwriter.ReadWriter{Out: buffer},
    }

    _, err := cmd.Execute(context.Background())
    require.Empty(t, buffer.String())
    require.EqualError(t, err, "Internal API available: FAILED - Internal API unreachable")
}