From f61d2036a9c9f7a1401eec6fe5b6931b7adf3e48 Mon Sep 17 00:00:00 2001
From: Niels Thykier <niels@thykier.net>
Date: Wed, 22 Apr 2020 17:54:56 +0000
Subject: [PATCH] Add test-case for declarative conffile removal

Signed-off-by: Niels Thykier <niels@thykier.net>
---
 Makefile                                      |  1 +
 t-conffile-declarative-removal/Makefile       | 26 +++++++++++++++++++
 .../pkg-conffile-v1/DEBIAN/conffiles          |  1 +
 .../pkg-conffile-v1/DEBIAN/control            |  7 +++++
 .../test-dir/test-conffile-to-be-removed      |  0
 .../pkg-conffile-v2/DEBIAN/conffiles          |  1 +
 .../pkg-conffile-v2/DEBIAN/control            |  7 +++++
 7 files changed, 43 insertions(+)
 create mode 100644 t-conffile-declarative-removal/Makefile
 create mode 100644 t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/conffiles
 create mode 100644 t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/control
 create mode 100644 t-conffile-declarative-removal/pkg-conffile-v1/test-dir/test-conffile-to-be-removed
 create mode 100644 t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/conffiles
 create mode 100644 t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/control

diff --git a/Makefile b/Makefile
index 73ee8a6..e29618d 100644
--- a/Makefile
+++ b/Makefile
@@ -135,6 +135,7 @@ TESTS_PASS += t-substvars
 TESTS_PASS += t-failinst-failrm
 TESTS_PASS += t-dir-extension-check
 TESTS_PASS += t-multiarch
+TESTS_PASS += t-conffile-declarative-removal
 
 ifneq (,$(filter test-all,$(DPKG_TESTSUITE_OPTIONS)))
 TESTS := $(TESTS_PASS) $(TESTS_FAIL) $(TESTS_MANUAL)
diff --git a/t-conffile-declarative-removal/Makefile b/t-conffile-declarative-removal/Makefile
new file mode 100644
index 0000000..f9ad61f
--- /dev/null
+++ b/t-conffile-declarative-removal/Makefile
@@ -0,0 +1,26 @@
+TESTS_DEB := pkg-conffile-v1 pkg-conffile-v2
+
+include ../Test.mk
+
+test-case:
+	# Unmodified case
+	$(DPKG_INSTALL) pkg-conffile-v1.deb
+	test -f "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed"
+	$(DPKG_INSTALL) pkg-conffile-v2.deb
+	test ! -f "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed"
+
+	# Reset
+	$(DPKG_PURGE) pkg-conffile
+	test ! -f "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed"
+
+	# Modified; should store .dpkg-old
+	$(DPKG_INSTALL) pkg-conffile-v1.deb
+	test -f "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed"
+	echo "modify this" > "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed"
+	$(DPKG_INSTALL) pkg-conffile-v2.deb
+	test ! -f "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed"
+	test -f "$(DPKG_INSTDIR)/test-dir/test-conffile-to-be-removed.dpkg-old"
+
+test-clean:
+	$(DPKG_PURGE) pkg-conffile
+	$(BEROOT) $(RM) -rf "$(DPKG_INSTDIR)/test-dir"
diff --git a/t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/conffiles b/t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/conffiles
new file mode 100644
index 0000000..c4138c4
--- /dev/null
+++ b/t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/conffiles
@@ -0,0 +1 @@
+/test-dir/test-conffile-to-be-removed
diff --git a/t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/control b/t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/control
new file mode 100644
index 0000000..5626d2a
--- /dev/null
+++ b/t-conffile-declarative-removal/pkg-conffile-v1/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: pkg-conffile
+Version: 1
+Section: test
+Priority: extra
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Architecture: all
+Description: test package - conffile to be removed v1
diff --git a/t-conffile-declarative-removal/pkg-conffile-v1/test-dir/test-conffile-to-be-removed b/t-conffile-declarative-removal/pkg-conffile-v1/test-dir/test-conffile-to-be-removed
new file mode 100644
index 0000000..e69de29
diff --git a/t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/conffiles b/t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/conffiles
new file mode 100644
index 0000000..bc7b769
--- /dev/null
+++ b/t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/conffiles
@@ -0,0 +1 @@
+/test-dir/test-conffile-to-be-removed:remove-on-upgrade
diff --git a/t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/control b/t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/control
new file mode 100644
index 0000000..7057432
--- /dev/null
+++ b/t-conffile-declarative-removal/pkg-conffile-v2/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: pkg-conffile
+Version: 2
+Section: test
+Priority: extra
+Maintainer: Dpkg Developers <debian-dpkg@lists.debian.org>
+Architecture: all
+Description: test package - conffile to be removed v2
-- 
2.26.1

