mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2024-12-26 13:29:05 +01:00
Start to port api test
This commit is contained in:
parent
ac6785448e
commit
49dad5c8c5
128
test/api_test.go
128
test/api_test.go
@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"os"
|
"os"
|
||||||
@ -18,6 +19,7 @@ import (
|
|||||||
"github.com/ClusterCockpit/cc-backend/internal/graph"
|
"github.com/ClusterCockpit/cc-backend/internal/graph"
|
||||||
"github.com/ClusterCockpit/cc-backend/internal/metricdata"
|
"github.com/ClusterCockpit/cc-backend/internal/metricdata"
|
||||||
"github.com/ClusterCockpit/cc-backend/internal/repository"
|
"github.com/ClusterCockpit/cc-backend/internal/repository"
|
||||||
|
"github.com/ClusterCockpit/cc-backend/pkg/archive"
|
||||||
"github.com/ClusterCockpit/cc-backend/pkg/schema"
|
"github.com/ClusterCockpit/cc-backend/pkg/schema"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
@ -25,8 +27,15 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func setup(t *testing.T) *api.RestApi {
|
func setup(t *testing.T) *api.RestApi {
|
||||||
|
const testconfig = `{
|
||||||
|
"addr": "0.0.0.0:80",
|
||||||
|
"archive": {
|
||||||
|
"kind": "file",
|
||||||
|
"path": "./var/job-archive"
|
||||||
|
}
|
||||||
|
}`
|
||||||
const testclusterJson = `{
|
const testclusterJson = `{
|
||||||
"name": "testcluster",
|
"name": "testcluster",
|
||||||
"subClusters": [
|
"subClusters": [
|
||||||
{
|
{
|
||||||
"name": "sc0",
|
"name": "sc0",
|
||||||
@ -93,22 +102,31 @@ func setup(t *testing.T) *api.RestApi {
|
|||||||
}
|
}
|
||||||
f.Close()
|
f.Close()
|
||||||
|
|
||||||
|
cfgFilePath := filepath.Join(tmpdir, "config.json")
|
||||||
|
if err := os.WriteFile(cfgFilePath, []byte(testconfig), 0666); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
config.Init(cfgFilePath)
|
||||||
|
archiveCfg := fmt.Sprintf("{\"kind\":\"file\",\"path\":\"%s\"}", jobarchive)
|
||||||
|
config.Keys.Archive = []byte(archiveCfg)
|
||||||
|
|
||||||
repository.Connect("sqlite3", dbfilepath)
|
repository.Connect("sqlite3", dbfilepath)
|
||||||
db := repository.GetConnection()
|
db := repository.GetConnection()
|
||||||
|
|
||||||
|
if err := archive.Init(config.Keys.Archive); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := metricdata.Init(config.Keys.DisableArchive); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
if _, err := db.DB.Exec(repository.JobsDBSchema); err != nil {
|
if _, err := db.DB.Exec(repository.JobsDBSchema); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := config.Init(db.DB, false, map[string]interface{}{}, jobarchive); err != nil {
|
jobRepo := repository.GetJobRepository()
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := metricdata.Init(jobarchive, false); err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
jobRepo := repository.GetRepository()
|
|
||||||
resolver := &graph.Resolver{DB: db.DB, Repo: jobRepo}
|
resolver := &graph.Resolver{DB: db.DB, Repo: jobRepo}
|
||||||
|
|
||||||
return &api.RestApi{
|
return &api.RestApi{
|
||||||
@ -122,9 +140,9 @@ func cleanup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function starts a job, stops it, and then reads its data from the job-archive.
|
* This function starts a job, stops it, and then reads its data from the job-archive.
|
||||||
* Do not run sub-tests in parallel! Tests should not be run in parallel at all, because
|
* Do not run sub-tests in parallel! Tests should not be run in parallel at all, because
|
||||||
* at least `setup` modifies global state. Log-Output is redirected to /dev/null on purpose.
|
* at least `setup` modifies global state. Log-Output is redirected to /dev/null on purpose.
|
||||||
*/
|
*/
|
||||||
func TestRestApi(t *testing.T) {
|
func TestRestApi(t *testing.T) {
|
||||||
restapi := setup(t)
|
restapi := setup(t)
|
||||||
@ -155,28 +173,28 @@ func TestRestApi(t *testing.T) {
|
|||||||
restapi.MountRoutes(r)
|
restapi.MountRoutes(r)
|
||||||
|
|
||||||
const startJobBody string = `{
|
const startJobBody string = `{
|
||||||
"jobId": 123,
|
"jobId": 123,
|
||||||
"user": "testuser",
|
"user": "testuser",
|
||||||
"project": "testproj",
|
"project": "testproj",
|
||||||
"cluster": "testcluster",
|
"cluster": "testcluster",
|
||||||
"partition": "default",
|
"partition": "default",
|
||||||
"walltime": 3600,
|
"walltime": 3600,
|
||||||
"arrayJobId": 0,
|
"arrayJobId": 0,
|
||||||
"numNodes": 1,
|
"numNodes": 1,
|
||||||
"numHwthreads": 8,
|
"numHwthreads": 8,
|
||||||
"numAcc": 0,
|
"numAcc": 0,
|
||||||
"exclusive": 1,
|
"exclusive": 1,
|
||||||
"monitoringStatus": 1,
|
"monitoringStatus": 1,
|
||||||
"smt": 1,
|
"smt": 1,
|
||||||
"tags": [{ "type": "testTagType", "name": "testTagName" }],
|
"tags": [{ "type": "testTagType", "name": "testTagName" }],
|
||||||
"resources": [
|
"resources": [
|
||||||
{
|
{
|
||||||
"hostname": "host123",
|
"hostname": "host123",
|
||||||
"hwthreads": [0, 1, 2, 3, 4, 5, 6, 7]
|
"hwthreads": [0, 1, 2, 3, 4, 5, 6, 7]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metaData": { "jobScript": "blablabla..." },
|
"metaData": { "jobScript": "blablabla..." },
|
||||||
"startTime": 123456789
|
"startTime": 123456789
|
||||||
}`
|
}`
|
||||||
|
|
||||||
var dbid int64
|
var dbid int64
|
||||||
@ -234,7 +252,7 @@ func TestRestApi(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const stopJobBody string = `{
|
const stopJobBody string = `{
|
||||||
"jobId": 123,
|
"jobId": 123,
|
||||||
"startTime": 123456789,
|
"startTime": 123456789,
|
||||||
"cluster": "testcluster",
|
"cluster": "testcluster",
|
||||||
|
|
||||||
@ -313,26 +331,26 @@ func TestRestApi(t *testing.T) {
|
|||||||
|
|
||||||
func subtestLetJobFail(t *testing.T, restapi *api.RestApi, r *mux.Router) {
|
func subtestLetJobFail(t *testing.T, restapi *api.RestApi, r *mux.Router) {
|
||||||
const startJobBody string = `{
|
const startJobBody string = `{
|
||||||
"jobId": 12345,
|
"jobId": 12345,
|
||||||
"user": "testuser",
|
"user": "testuser",
|
||||||
"project": "testproj",
|
"project": "testproj",
|
||||||
"cluster": "testcluster",
|
"cluster": "testcluster",
|
||||||
"partition": "default",
|
"partition": "default",
|
||||||
"walltime": 3600,
|
"walltime": 3600,
|
||||||
"arrayJobId": 0,
|
"arrayJobId": 0,
|
||||||
"numNodes": 1,
|
"numNodes": 1,
|
||||||
"numAcc": 0,
|
"numAcc": 0,
|
||||||
"exclusive": 1,
|
"exclusive": 1,
|
||||||
"monitoringStatus": 1,
|
"monitoringStatus": 1,
|
||||||
"smt": 1,
|
"smt": 1,
|
||||||
"tags": [],
|
"tags": [],
|
||||||
"resources": [
|
"resources": [
|
||||||
{
|
{
|
||||||
"hostname": "host123"
|
"hostname": "host123"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metaData": {},
|
"metaData": {},
|
||||||
"startTime": 12345678
|
"startTime": 12345678
|
||||||
}`
|
}`
|
||||||
|
|
||||||
ok := t.Run("StartJob", func(t *testing.T) {
|
ok := t.Run("StartJob", func(t *testing.T) {
|
||||||
@ -350,7 +368,7 @@ func subtestLetJobFail(t *testing.T, restapi *api.RestApi, r *mux.Router) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const stopJobBody string = `{
|
const stopJobBody string = `{
|
||||||
"jobId": 12345,
|
"jobId": 12345,
|
||||||
"cluster": "testcluster",
|
"cluster": "testcluster",
|
||||||
|
|
||||||
"jobState": "failed",
|
"jobState": "failed",
|
||||||
|
Loading…
Reference in New Issue
Block a user