From cc143e38041972ad4dbaff9cfbfd416c29d581b5 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Wed, 15 Jan 2025 17:41:31 +0100 Subject: syz-cluster: add support for findings Findings are crashes and build/boot/test errors that happened during the patch series processing. --- syz-cluster/controller/api_test.go | 66 ++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 9 deletions(-) (limited to 'syz-cluster/controller/api_test.go') diff --git a/syz-cluster/controller/api_test.go b/syz-cluster/controller/api_test.go index 6076ddc63..bc205392b 100644 --- a/syz-cluster/controller/api_test.go +++ b/syz-cluster/controller/api_test.go @@ -4,6 +4,7 @@ package main import ( + "context" "net/http/httptest" "testing" "time" @@ -39,6 +40,60 @@ func TestAPISuccessfulBuild(t *testing.T) { server := httptest.NewServer(apiServer.Mux()) defer server.Close() + client := api.NewClient(server.URL) + buildInfo, _ := uploadTestBuild(t, client) + info, err := client.LastSuccessfulBuild(ctx, &api.LastBuildReq{ + Arch: buildInfo.Arch, + TreeName: buildInfo.TreeName, + ConfigName: buildInfo.ConfigName, + }) + assert.NoError(t, err) + assert.Equal(t, buildInfo, info) +} + +func TestAPISaveFinding(t *testing.T) { + env, ctx := app.TestEnvironment(t) + apiServer := NewControllerAPI(env) + server := httptest.NewServer(apiServer.Mux()) + defer server.Close() + + series := addTestSeries(t, db.NewSeriesRepository(env.Spanner), env.BlobStorage) + session := addTestSession(t, db.NewSessionRepository(env.Spanner), series) + + client := api.NewClient(server.URL) + _, buildResp := uploadTestBuild(t, client) + err := client.UploadTestResult(ctx, &api.TestResult{ + SessionID: session.ID, + BaseBuildID: buildResp.ID, + TestName: "test", + Result: api.TestRunning, + }) + assert.NoError(t, err) + + t.Run("not existing test", func(t *testing.T) { + err = client.UploadFinding(ctx, &api.Finding{ + SessionID: session.ID, + TestName: "unknown test", + }) + assert.Error(t, err) + }) + + t.Run("must succeed", func(t *testing.T) { + finding := &api.Finding{ + SessionID: session.ID, + TestName: "test", + Report: []byte("report"), + Log: []byte("log"), + } + err = client.UploadFinding(ctx, finding) + assert.NoError(t, err) + // Even if the finding is reported the second time, it must still not fail. + err = client.UploadFinding(ctx, finding) + assert.NoError(t, err) + }) +} + +func uploadTestBuild(t *testing.T, client *api.Client) (*api.Build, *api.UploadBuildResp) { buildInfo := &api.Build{ Arch: "amd64", TreeName: "mainline", @@ -47,17 +102,10 @@ func TestAPISuccessfulBuild(t *testing.T) { CommitDate: time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC), BuildSuccess: true, } - client := api.NewClient(server.URL) - ret, err := client.UploadBuild(ctx, &api.UploadBuildReq{ + ret, err := client.UploadBuild(context.Background(), &api.UploadBuildReq{ Build: *buildInfo, }) assert.NoError(t, err) assert.NotEmpty(t, ret.ID) - info, err := client.LastSuccessfulBuild(ctx, &api.LastBuildReq{ - Arch: buildInfo.Arch, - TreeName: buildInfo.TreeName, - ConfigName: buildInfo.ConfigName, - }) - assert.NoError(t, err) - assert.Equal(t, buildInfo, info) + return buildInfo, ret } -- cgit mrf-deployment