def setUp(self): self.testdir = os.path.dirname(os.path.abspath(__file__)) # make a copy of a model btrfs subvol tree model_root = os.path.join(self.testdir, "data", "model_root") self.sandbox = os.path.join(self.testdir, "data", "root3") if os.path.exists(self.sandbox): shutil.rmtree(self.sandbox) shutil.copytree(model_root, self.sandbox, symlinks=True) snapshots.setup(self.sandbox)
def __init__(self, fstab="/etc/fstab", sandbox=None): self.fstab = Fstab(fstab) self.commands = LowLevelCommands() # if we haven't been given a testing ground to play in, mount the real # root volume self.test = sandbox is not None self.mp = sandbox if self.mp is None: uuid = self.fstab.uuid_for_mountpoint("/") mountpoint = tempfile.mkdtemp(prefix="apt-btrfs-snapshot-mp-") if not self.commands.mount(uuid, mountpoint): os.rmdir(mountpoint) raise Exception("Unable to mount root volume") self.mp = mountpoint snapshots.setup(self.mp)
def test_convert(self, mock_stdout): mock_stdout.side_effect = StringIO() subprocess.call(["python", "../convert.py", self.sandbox]) apt_btrfs = AptBtrfsSnapshot( fstab=os.path.join(self.testdir, "data", "fstab"), test_mp=self.sandbox) apt_btrfs.tree() output = extract_stdout(mock_stdout) expected = u"""@ (none) @apt-snapshot-2013-08-15_23:04:32 (+1) @apt-snapshot-2013-08-14_20:26:45 (^13) @apt-snapshot-2013-08-13_12:23:41 (+8) @apt-snapshot-2013-08-13_03:11:29 (+6 ^3) @apt-snapshot-2013-08-12_02:04:06 (unknown) × """ self.assertEqual(output, expected) snapshots.setup(self.sandbox) # The following change information tests have been meticulously # verified. changes = Snapshot("@apt-snapshot-2013-08-15_23:04:32").changes self.assertEqual(changes['install'], [(u'handbrake-gtk', u'5698svnppa1~precise1')]) self.assertEqual(changes['auto-install'], []) self.assertEqual(changes['upgrade'], []) self.assertEqual(changes['remove'], []) self.assertEqual(changes['purge'], []) changes = Snapshot("@apt-snapshot-2013-08-14_20:26:45").changes self.assertEqual(changes['install'], []) self.assertEqual(changes['auto-install'], []) self.assertEqual(changes['upgrade'], [(u'firefox', u'22.0+build2-0ubuntu0.12.04.2, 23.0+build2-0ubuntu0.12.04.1'), (u'firefox-locale-en', u'22.0+build2-0ubuntu0.12.04.2, 23.0+build2-0ubuntu0.12.04.1'), (u'gimp-help-common', u'2.6.1-1, 1:2.8-0precise16~ppa'), (u'gimp-help-en', u'2.6.1-1, 1:2.8-0precise16~ppa'), (u'gimp-help-fr', u'2.6.1-1, 1:2.8-0precise16~ppa'), (u'jockey-common', u'0.9.7-0ubuntu7.7, 0.9.7-0ubuntu7.9'), (u'jockey-gtk', u'0.9.7-0ubuntu7.7, 0.9.7-0ubuntu7.9'), (u'lsb-base', u'4.0-0ubuntu20.2, 4.0-0ubuntu20.3'), (u'lsb-release', u'4.0-0ubuntu20.2, 4.0-0ubuntu20.3'), (u'mintinstall-icons', u'1.0.5, 1.0.7'), (u'python-problem-report', u'2.0.1-0ubuntu17.3, 2.0.1-0ubuntu17.4'), (u'thunderbird', u'17.0.7+build1-0ubuntu0.12.04.1, 17.0.8+build1-0ubuntu0.12.04.1'), (u'thunderbird-gnome-support', u'17.0.7+build1-0ubuntu0.12.04.1, 17.0.8+build1-0ubuntu0.12.04.1')]) self.assertEqual(changes['remove'], []) self.assertEqual(changes['purge'], []) changes = Snapshot("@apt-snapshot-2013-08-13_12:23:41").changes self.assertEqual(changes['install'], [(u'0ad', u'0.0.13-0ubuntu1~12.04~wfg1')]) self.assertEqual(changes['auto-install'], [(u'0ad-data', u'0.0.13-0ubuntu1~12.04~wfg1'), (u'0ad-data-common', u'0.0.13-0ubuntu1~12.04~wfg1'), (u'libboost-filesystem1.46.1', u'1.46.1-7ubuntu3'), (u'libboost-signals1.46.1', u'1.46.1-7ubuntu3'), (u'libboost-system1.46.1', u'1.46.1-7ubuntu3'), (u'libenet1a', u'1.3.3-2ubuntu1'), (u'libnvtt2', u'2.0.8-1+dfsg-2')]) self.assertEqual(changes['upgrade'], []) self.assertEqual(changes['remove'], []) self.assertEqual(changes['purge'], []) changes = Snapshot("@apt-snapshot-2013-08-13_03:11:29").changes self.assertEqual(changes['install'], []) self.assertEqual(changes['auto-install'], [(u'libamd2.2.0', u'1:3.4.0-2ubuntu3'), (u'libbabl-0.1-0', u'0.1.11-1precise0~ppa'), (u'libblas3gf', u'1.2.20110419-2ubuntu1'), (u'libgegl-0.2-0', u'0.2.1-1precise0~ppa'), (u'libopenraw1', u'0.0.8-3build1'), (u'libumfpack5.4.0', u'1:3.4.0-2ubuntu3')]) self.assertEqual(changes['upgrade'], [(u'gimp', u'2.6.12-1ubuntu1.2, 2.8.6-0precise1~ppa'), (u'gimp-data', u'2.6.12-1ubuntu1.2, 2.8.6-0precise1~ppa'), (u'libgimp2.0', u'2.6.12-1ubuntu1.2, 2.8.6-0precise1~ppa')]) self.assertEqual(changes['remove'], []) self.assertEqual(changes['purge'], []) changes = Snapshot("@apt-snapshot-2013-08-12_02:04:06").changes self.assertEqual(changes, None)
def test_tree_view(self, mock_stdout): mock_stdout.side_effect = StringIO() self.maxDiff = None self.apt_btrfs.tree() output = extract_stdout(mock_stdout) expected = """@ (+17) │ │ @apt-snapshot-2013-08-09_21:09:40 (unknown) │ @apt-snapshot-2013-08-09_21:08:01 (unknown) │ │ │ │ @apt-snapshot-2013-08-09_21:06:32 (unknown) │ │ × │ │ @apt-snapshot-2013-08-09_21:05:56 (unknown) │ ├─────┘ │ @apt-snapshot-2013-08-09_21:04:37 (unknown) │ @apt-snapshot-2013-08-08_18:44:47 (unknown) ├──┘ @apt-snapshot-2013-08-06_13:26:30 (unknown) @apt-snapshot-2013-08-06_00:29:05 (unknown) │ │ @apt-snapshot-2013-08-09_21:06:00 (unknown) │ │ │ │ @apt-snapshot-2013-08-07_18:00:42 (unknown) │ │ × │ │ @apt-snapshot-2013-08-05_04:30:58 (unknown) │ ├─────┘ │ @apt-snapshot-2013-08-02_00:24:00 (unknown) ├──┘ @apt-snapshot-2013-08-01_19:53:16 (+1 -1) │ │ @apt-snapshot-2013-07-31_12:53:16-raring-to-go (+1 ^2) ├──┘ @apt-snapshot-2013-07-31_00:00:04 (+1) @apt-snapshot-2013-07-26_14:50:53 (unknown) × """ self.assertEqual(output, expected) Snapshot(SNAP_PREFIX + "2013-08-09_21:06:00").parent = None # reinitialize snapshots global variables. snapshots.setup(self.sandbox) self.apt_btrfs.tree() output = extract_stdout(mock_stdout) expected += """@ (+17) │ │ @apt-snapshot-2013-08-09_21:09:40 (unknown) │ @apt-snapshot-2013-08-09_21:08:01 (unknown) │ │ │ │ @apt-snapshot-2013-08-09_21:06:32 (unknown) │ │ × │ │ @apt-snapshot-2013-08-09_21:06:00 (unknown) │ │ × │ │ @apt-snapshot-2013-08-09_21:05:56 (unknown) │ ├────────┘ │ @apt-snapshot-2013-08-09_21:04:37 (unknown) │ @apt-snapshot-2013-08-08_18:44:47 (unknown) ├──┘ @apt-snapshot-2013-08-06_13:26:30 (unknown) @apt-snapshot-2013-08-06_00:29:05 (unknown) │ │ @apt-snapshot-2013-08-07_18:00:42 (unknown) │ × │ @apt-snapshot-2013-08-05_04:30:58 (unknown) │ @apt-snapshot-2013-08-02_00:24:00 (unknown) ├─────┘ @apt-snapshot-2013-08-01_19:53:16 (+1 -1) │ │ @apt-snapshot-2013-07-31_12:53:16-raring-to-go (+1 ^2) ├──┘ @apt-snapshot-2013-07-31_00:00:04 (+1) @apt-snapshot-2013-07-26_14:50:53 (unknown) × """ self.assertEqual(output, expected)