github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/syz-cluster/pkg/triage/git_test.go (about)

     1  // Copyright 2024 syzkaller project authors. All rights reserved.
     2  // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
     3  
     4  package triage
     5  
     6  import (
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/google/syzkaller/pkg/osutil"
    11  	"github.com/google/syzkaller/pkg/vcs"
    12  	"github.com/google/syzkaller/syz-cluster/pkg/api"
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestGitTreeOpsHead(t *testing.T) {
    17  	baseDir := t.TempDir()
    18  	repo := vcs.MakeTestRepo(t, baseDir)
    19  	// Emulate the behavior of the kernel-disk machinery.
    20  	osutil.WriteFile(filepath.Join(baseDir, "file.txt"), []byte("Some content"))
    21  	repo.Git("add", "file.txt")
    22  	head1 := repo.CommitChange("first head")
    23  	repo.SetTag("mainline/main")
    24  	osutil.WriteFile(filepath.Join(baseDir, "file.txt"), []byte("Another content"))
    25  	repo.Git("add", "file.txt")
    26  	head2 := repo.CommitChange("second head")
    27  	repo.SetTag("second/main")
    28  	// Verify that the right commits are queried.
    29  	ops, err := NewGitTreeOps(baseDir, false)
    30  	assert.NoError(t, err)
    31  	commit, err := ops.HeadCommit(&api.Tree{Name: "mainline", Branch: "main"})
    32  	assert.NoError(t, err)
    33  	assert.Equal(t, head1.Hash, commit.Hash)
    34  	commit, err = ops.HeadCommit(&api.Tree{Name: "second", Branch: "main"})
    35  	assert.NoError(t, err)
    36  	assert.Equal(t, head2.Hash, commit.Hash)
    37  }
    38  
    39  func TestGitTreeOpsApply(t *testing.T) {
    40  	baseDir := t.TempDir()
    41  	repo := vcs.MakeTestRepo(t, baseDir)
    42  	osutil.WriteFile(filepath.Join(baseDir, "file.txt"), []byte("First\nSecond\nThird\n"))
    43  	repo.Git("add", "file.txt")
    44  	base := repo.CommitChange("base")
    45  
    46  	ops, err := NewGitTreeOps(baseDir, false)
    47  	assert.NoError(t, err)
    48  	assert.Error(t, ops.ApplySeries(base.Hash, [][]byte{goodPatch, wontApply}))
    49  	assert.NoError(t, ops.ApplySeries(base.Hash, [][]byte{goodPatch}))
    50  }
    51  
    52  var wontApply = []byte(`From dc2cf7bc4a9dbe170d47338d0fe6d2351c88c9d1 Mon Sep 17 00:00:00 2001
    53  From: Test Syzkaller <test@syzkaller.com>
    54  Date: Tue, 10 Dec 2024 17:58:20 +0100
    55  Subject: [PATCH] change1
    56  
    57  ---
    58   file.txt | 6 +++---
    59   1 file changed, 3 insertions(+), 3 deletions(-)
    60  
    61  diff --git a/file.txt b/file.txt
    62  index 0d39765..97c39a4 100644
    63  --- a/file.txt
    64  +++ b/file.txt
    65  @@ -1,3 +1,3 @@
    66  -1First
    67  -1Second
    68  -1Third
    69  +First1
    70  +Second
    71  +Third1
    72  --
    73  2.47.1.545.g3c1d2e2a6a-goog
    74  `)
    75  
    76  var goodPatch = []byte(`From 708670e05c0462d3783f774cef82f9a3b3099f9a Mon Sep 17 00:00:00 2001
    77  From: Test Syzkaller <test@syzkaller.com>
    78  Date: Tue, 10 Dec 2024 17:57:37 +0100
    79  Subject: [PATCH] change1
    80  
    81  ---
    82   file.txt | 4 ++--
    83   1 file changed, 2 insertions(+), 2 deletions(-)
    84  
    85  diff --git a/file.txt b/file.txt
    86  index ab7c514..97c39a4 100644
    87  --- a/file.txt
    88  +++ b/file.txt
    89  @@ -1,3 +1,3 @@
    90  -First
    91  +First1
    92   Second
    93  -Third
    94  +Third1
    95  --
    96  2.47.1.545.g3c1d2e2a6a-goog
    97  `)