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  }