Blame internal/client/unit_test.go

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
}