debian-forge-composer/internal/client/utils.go
Brian C. Lane e3934108f7 client: Handle the differences between unit tests and integration tests
The mock server used by unit tests is slightly different than the
running server, mostly related to package names that are hard-coded.

This adds a bool to testState that can be used in the tests to alter the
expected behavior. It should be used as little as possible.
2020-03-27 19:07:33 +01:00

65 lines
1.6 KiB
Go

// Package weldrcheck contains functions used to run integration tests on a running API server
// Copyright (C) 2020 by Red Hat, Inc.
// nolint: deadcode,unused // These functions are used by the *_test.go code
package client
import (
"context"
"fmt"
"net"
"net/http"
"sort"
"strconv"
"time"
)
type TestState struct {
socket *http.Client
apiVersion int
repoDir string
unitTest bool
}
// isStringInSlice returns true if the string is present, false if not
// slice must be sorted
// TODO decide if this belongs in a more widely useful package location
func isStringInSlice(slice []string, s string) bool {
i := sort.SearchStrings(slice, s)
if i < len(slice) && slice[i] == s {
return true
}
return false
}
func setUpTestState(socketPath string, timeout time.Duration, unitTest bool) (*TestState, error) {
state := TestState{unitTest: unitTest}
state.socket = &http.Client{
// TODO This may be too short/simple for downloading images
Timeout: timeout,
Transport: &http.Transport{
DialContext: func(_ context.Context, _, _ string) (net.Conn, error) {
return net.Dial("unix", socketPath)
},
},
}
// Make sure the server is running
status, resp, err := GetStatusV0(state.socket)
if err != nil {
return nil, fmt.Errorf("status request failed with client error: %s", err)
}
if resp != nil {
return nil, fmt.Errorf("status request failed: %v\n", resp)
}
apiVersion, e := strconv.Atoi(status.API)
if e != nil {
state.apiVersion = 0
} else {
state.apiVersion = apiVersion
}
fmt.Printf("Running tests against %s %s server using V%d API\n\n", status.Backend, status.Build, state.apiVersion)
return &state, nil
}