|
Packit |
63bb0d |
// Package client contains functions for communicating with the API server
|
|
Packit |
63bb0d |
// Copyright (C) 2020 by Red Hat, Inc.
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// +build !integration
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
package client
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
import (
|
|
Packit |
63bb0d |
"io/ioutil"
|
|
Packit |
63bb0d |
"log"
|
|
Packit |
63bb0d |
"net"
|
|
Packit |
63bb0d |
"net/http"
|
|
Packit |
63bb0d |
"os"
|
|
Packit Service |
3a6627 |
"path"
|
|
Packit |
63bb0d |
"testing"
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/distro/fedoratest"
|
|
Packit |
63bb0d |
rpmmd_mock "github.com/osbuild/osbuild-composer/internal/mocks/rpmmd"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
Packit |
63bb0d |
"github.com/osbuild/osbuild-composer/internal/weldr"
|
|
Packit |
63bb0d |
)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Hold test state to share between tests
|
|
Packit |
63bb0d |
var testState *TestState
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
func executeTests(m *testing.M) int {
|
|
Packit |
63bb0d |
// Setup the mocked server running on a temporary domain socket
|
|
Packit |
63bb0d |
tmpdir, err := ioutil.TempDir("", "client_test-")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
defer os.RemoveAll(tmpdir)
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
socketPath := tmpdir + "/client_test.socket"
|
|
Packit |
63bb0d |
ln, err := net.Listen("unix", socketPath)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Create a mock API server listening on the temporary socket
|
|
Packit Service |
3a6627 |
err = os.Mkdir(path.Join(tmpdir, "/jobs"), 0755)
|
|
Packit Service |
3a6627 |
if err != nil {
|
|
Packit Service |
3a6627 |
panic(err)
|
|
Packit Service |
3a6627 |
}
|
|
Packit Service |
3a6627 |
fixture := rpmmd_mock.BaseFixture(path.Join(tmpdir, "/jobs"))
|
|
Packit |
63bb0d |
rpm := rpmmd_mock.NewRPMMDMock(fixture)
|
|
Packit |
63bb0d |
distro := fedoratest.New()
|
|
Packit |
63bb0d |
arch, err := distro.GetArch("x86_64")
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
repos := []rpmmd.RepoConfig{{Name: "test-system-repo", BaseURL: "http://example.com/test/os/test_arch"}}
|
|
Packit |
63bb0d |
logger := log.New(os.Stdout, "", 0)
|
|
Packit |
63bb0d |
api := weldr.New(rpm, arch, distro, repos, logger, fixture.Store, fixture.Workers, "")
|
|
Packit |
63bb0d |
server := http.Server{Handler: api}
|
|
Packit |
63bb0d |
defer server.Close()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
go func() {
|
|
Packit |
63bb0d |
err := server.Serve(ln)
|
|
Packit |
63bb0d |
if err != nil && err != http.ErrServerClosed {
|
|
Packit |
63bb0d |
panic(err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
}()
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
testState, err = setUpTestState(socketPath, true)
|
|
Packit |
63bb0d |
if err != nil {
|
|
Packit |
63bb0d |
log.Fatalf("ERROR: Test setup failed: %s\n", err)
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
// Run the tests
|
|
Packit |
63bb0d |
return m.Run()
|
|
Packit |
63bb0d |
}
|
|
Packit |
63bb0d |
|
|
Packit |
63bb0d |
func TestMain(m *testing.M) {
|
|
Packit |
63bb0d |
os.Exit(executeTests(m))
|
|
Packit |
63bb0d |
}
|