summaryrefslogtreecommitdiff
path: root/integration_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'integration_test.go')
-rw-r--r--integration_test.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/integration_test.go b/integration_test.go
new file mode 100644
index 0000000..42b13a5
--- /dev/null
+++ b/integration_test.go
@@ -0,0 +1,103 @@
+//go:build integration
+// +build integration
+
+package main
+
+import (
+ "bytes"
+ _ "embed"
+ "fmt"
+ "os"
+ "os/exec"
+ "strings"
+ "testing"
+
+ "github.com/alecthomas/assert/v2"
+)
+
+//go:embed testdata/package.nix
+var packageNix []byte
+
+//go:embed testdata/configuration.nix
+var configurationNix []byte
+
+func TestDiffNixPackage(t *testing.T) {
+ tempDir := t.TempDir()
+ os.WriteFile(tempDir+"/default.nix", packageNix, 0644)
+ runIn(tempDir, "nix-build", "--argstr", "version", "1.2.3")
+ copySymlink(tempDir+"/result", tempDir+"/old-result")
+ runIn(tempDir, "nix-build", "--argstr", "version", "1.2.4")
+
+ var sb strings.Builder
+ innerMain(&sb, tempDir+"/old-result", tempDir+"/result")
+ assert.Equal(t, sb.String(), strings.TrimLeft(`
+Version changed:
+ test-dependency: 1.2.3 -> 1.2.4
+
+ test-indirect-dependency: 1.2.3 -> 1.2.4
+`, "\n"))
+}
+
+func TestDiffNixPackageDrv(t *testing.T) {
+ tempDir := t.TempDir()
+ os.WriteFile(tempDir+"/default.nix", packageNix, 0644)
+ runIn(tempDir, "nix-build", "--argstr", "version", "1.2.3")
+ copySymlink(tempDir+"/result", tempDir+"/old-result")
+ runIn(tempDir, "nix-build", "--argstr", "version", "1.2.4")
+
+ out, _ := runIn(tempDir, "nix-store", "--query", "--deriver", "old-result", "result")
+ lines := strings.Split(out, "\n")
+
+ var sb strings.Builder
+ innerMain(&sb, lines[0], lines[1])
+ assert.Equal(t, sb.String(), strings.TrimLeft(`
+Version changed:
+ test-dependency: 1.2.3 -> 1.2.4
+
+ test-indirect-dependency: 1.2.3 -> 1.2.4
+`, "\n"))
+}
+
+func TestDiffNixSystem(t *testing.T) {
+ tempDir := t.TempDir()
+ os.WriteFile(tempDir+"/package.nix", packageNix, 0644)
+ os.WriteFile(tempDir+"/configuration.nix", configurationNix, 0644)
+ os.WriteFile(tempDir+"/version.nix", []byte("\"1.2.3\""), 0644)
+ runIn(tempDir, "nixos-rebuild", "build", "-I", "nixos-config=configuration.nix", "-I", "pkg-version=./version.nix")
+ err := copySymlink(tempDir+"/result", tempDir+"/old-result")
+ assert.NoError(t, err)
+ os.WriteFile(tempDir+"/version.nix", []byte("\"1.2.4\""), 0644)
+ runIn(tempDir, "nixos-rebuild", "build", "-I", "nixos-config=configuration.nix", "-I", "pkg-version=./version.nix")
+
+ var sb strings.Builder
+ innerMain(&sb, tempDir+"/old-result", tempDir+"/result")
+ assert.Equal(t, sb.String(), strings.TrimLeft(`
+Version changed:
+ test-package: 1.2.3 -> 1.2.4
+ user-package: 1.2.3 -> 1.2.4
+
+ test-dependency: 1.2.3 -> 1.2.4
+ test-indirect-dependency: 1.2.3 -> 1.2.4
+`, "\n"))
+}
+
+func runIn(dir string, name string, args ...string) (string, error) {
+ cmd := exec.Command(name, args...)
+ cmd.Dir = dir
+ var stderr bytes.Buffer
+ cmd.Stderr = &stderr
+ out, err := cmd.Output()
+ if err != nil {
+ return "", fmt.Errorf("%s failed: %v: %s", name, err, stderr.String())
+ }
+ return string(out), nil
+}
+
+func copySymlink(src, dst string) error {
+ target, err := os.Readlink(src)
+ if err != nil {
+ return err
+ }
+
+ return os.Symlink(target, dst)
+}