github.com/wolfi-dev/wolfictl@v0.16.11/pkg/checks/diff_test.go (about) 1 package checks 2 3 import ( 4 "log" 5 "net/http" 6 "net/http/httptest" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestDiff(t *testing.T) { 15 resultDir := t.TempDir() 16 17 dir := filepath.Join("testdata", "diff") 18 originalData, err := os.ReadFile(filepath.Join(dir, "test_orig.apk")) 19 assert.NoError(t, err) 20 21 apkIndexData, err := os.ReadFile(filepath.Join(dir, "APKINDEX.tgz")) 22 assert.NoError(t, err) 23 24 // create a test server to download the test apk from 25 const apkindexEndpoint = "/APKINDEX.tar.gz" 26 server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { 27 switch req.URL.Path { 28 case apkindexEndpoint: 29 _, err = rw.Write(apkIndexData) 30 assert.NoError(t, err) 31 case "/test-1.2.3-r0.apk": 32 _, err = rw.Write(originalData) 33 assert.NoError(t, err) 34 case "/test_sub-1.2.3-r0.apk": 35 _, err = rw.Write(originalData) 36 assert.NoError(t, err) 37 default: 38 http.Error(rw, "Not found", http.StatusNotFound) 39 } 40 })) 41 42 diffOpts := DiffOptions{ 43 ApkIndexURL: server.URL + apkindexEndpoint, 44 Client: server.Client(), 45 PackageListFilename: filepath.Join(dir, "packages.log"), 46 Dir: resultDir, 47 PackagesDir: dir, 48 Logger: log.New(log.Writer(), "test: ", log.LstdFlags|log.Lmsgprefix), 49 } 50 err = diffOpts.Diff() 51 assert.NoError(t, err) 52 53 diffLogFile := filepath.Join(resultDir, "diff.log") 54 55 actual, err := os.ReadFile(diffLogFile) 56 assert.NoError(t, err) 57 58 expectedPackage := ` 59 Package test: 60 Added: /test/wine.txt 61 Modified: /test/tester.txt 62 Deleted: /test/cheese.txt 63 ` 64 65 expectedSubpackage := ` 66 Package test_sub: 67 Unchanged 68 ` 69 assert.Contains(t, string(actual), expectedPackage) 70 assert.Contains(t, string(actual), expectedSubpackage) 71 }