aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/pkg/triage/git_test.go
blob: 31666b7dfbebe403a8e7f82b18eaf74ff8dd0321 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Copyright 2024 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

package triage

import (
	"path/filepath"
	"testing"

	"github.com/google/syzkaller/pkg/osutil"
	"github.com/google/syzkaller/pkg/vcs"
	"github.com/google/syzkaller/syz-cluster/pkg/api"
	"github.com/stretchr/testify/assert"
)

func TestGitTreeOpsHead(t *testing.T) {
	baseDir := t.TempDir()
	repo := vcs.MakeTestRepo(t, baseDir)
	// Emulate the behavior of the kernel-disk machinery.
	osutil.WriteFile(filepath.Join(baseDir, "file.txt"), []byte("Some content"))
	repo.Git("add", "file.txt")
	head1 := repo.CommitChange("first head")
	repo.SetTag("mainline/main")
	osutil.WriteFile(filepath.Join(baseDir, "file.txt"), []byte("Another content"))
	repo.Git("add", "file.txt")
	head2 := repo.CommitChange("second head")
	repo.SetTag("second/main")
	// Verify that the right commits are queried.
	ops, err := NewGitTreeOps(baseDir, false)
	assert.NoError(t, err)
	commit, err := ops.HeadCommit(&api.Tree{Name: "mainline", Branch: "main"})
	assert.NoError(t, err)
	assert.Equal(t, head1.Hash, commit.Hash)
	commit, err = ops.HeadCommit(&api.Tree{Name: "second", Branch: "main"})
	assert.NoError(t, err)
	assert.Equal(t, head2.Hash, commit.Hash)
}

func TestGitTreeOpsApply(t *testing.T) {
	baseDir := t.TempDir()
	repo := vcs.MakeTestRepo(t, baseDir)
	osutil.WriteFile(filepath.Join(baseDir, "file.txt"), []byte("First\nSecond\nThird\n"))
	repo.Git("add", "file.txt")
	base := repo.CommitChange("base")

	ops, err := NewGitTreeOps(baseDir, false)
	assert.NoError(t, err)
	assert.Error(t, ops.ApplySeries(base.Hash, [][]byte{goodPatch, wontApply}))
	assert.NoError(t, ops.ApplySeries(base.Hash, [][]byte{goodPatch}))
}

var wontApply = []byte(`From dc2cf7bc4a9dbe170d47338d0fe6d2351c88c9d1 Mon Sep 17 00:00:00 2001
From: Test Syzkaller <test@syzkaller.com>
Date: Tue, 10 Dec 2024 17:58:20 +0100
Subject: [PATCH] change1

---
 file.txt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/file.txt b/file.txt
index 0d39765..97c39a4 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
-1First
-1Second
-1Third
+First1
+Second
+Third1
--
2.47.1.545.g3c1d2e2a6a-goog
`)

var goodPatch = []byte(`From 708670e05c0462d3783f774cef82f9a3b3099f9a Mon Sep 17 00:00:00 2001
From: Test Syzkaller <test@syzkaller.com>
Date: Tue, 10 Dec 2024 17:57:37 +0100
Subject: [PATCH] change1

---
 file.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/file.txt b/file.txt
index ab7c514..97c39a4 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
-First
+First1
 Second
-Third
+Third1
--
2.47.1.545.g3c1d2e2a6a-goog
`)