def setUp(self): '''setup for each test''' global config # REPORT ALL THE OUTPUT self.maxDiff = None self.tmp_dir = tempfile.mkdtemp(prefix='aa-caching-') os.chmod(self.tmp_dir, 0o755) # create directory for cached blobs self.cache_dir = os.path.join(self.tmp_dir, 'cache') os.mkdir(self.cache_dir) # default path of the output cache file self.cache_file = os.path.join(self.cache_dir, PROFILE) # write our sample abstraction and profile out self.abstraction = testlib.write_file(self.tmp_dir, ABSTRACTION, ABSTRACTION_CONTENTS) self.profile = testlib.write_file(self.tmp_dir, PROFILE, PROFILE_CONTENTS) if config.debug: self.do_cleanup = False self.debug = True self.cmd_prefix = [config.parser, '--base', self.tmp_dir, '--skip-kernel-load'] if not self.is_apparmorfs_mounted(): self.cmd_prefix += ['-M', './features_files/features.all']
def test_cache_writing_skipped_when_features_differ(self): '''test cache writing is skipped when features file differs''' testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '--skip-bad-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(self.cache_file, expected=False)
def test_cache_writing_skipped_when_features_differ(self): '''test cache writing is skipped when features file differs''' testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '--skip-bad-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(os.path.join(self.cache_dir, PROFILE), expected=False)
def test_cache_not_loaded_when_features_differ(self): '''test cache is not loaded when features file differs''' self._generate_cache_file() testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for')
def test_cache_purge_leaves_original_cache_alone(self): '''test cache purging only touches alt cache''' # skip tearDown check to ensure non-alt cache is empty self.check_orig_cache = False filelist = [PROFILE, '.features', 'monkey'] for f in filelist: testlib.write_file(self.orig_cache_dir, f, 'monkey\n') self._purge_cache_test(PROFILE) for f in filelist: if not os.path.exists(os.path.join(self.orig_cache_dir, f)): self.fail('cache purge removed %s, was not supposed to' % (os.path.join(self.orig_cache_dir, f)))
def setUp(self): '''setup for each test''' global config # REPORT ALL THE OUTPUT self.maxDiff = None # skip all the things if apparmor securityfs isn't mounted if not os.path.exists("/sys/kernel/security/apparmor"): raise unittest.SkipTest("WARNING: /sys/kernel/security/apparmor does not exist. " "Skipping tests") self.tmp_dir = tempfile.mkdtemp(prefix='aa-caching-') os.chmod(self.tmp_dir, 0o755) # create directory for cached blobs self.cache_dir = os.path.join(self.tmp_dir, 'cache') os.mkdir(self.cache_dir) # write our sample profile out self.profile = testlib.write_file(self.tmp_dir, PROFILE, PROFILE_CONTENTS) if config.debug: self.do_cleanup = False self.debug = True self.cmd_prefix = [config.parser, '--base', self.tmp_dir, '--skip-kernel-load']
def _purge_cache_test(self, location): cache_file = testlib.write_file(self.cache_dir, location, 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--purge-cache', '-r', self.profile]) self.run_cmd_check(cmd) # no message is output self.assert_path_exists(cache_file, expected=False)
def test_cache_writing_clears_all_files(self): '''test cache writing clears all cache files''' check_file = testlib.write_file(self.cache_dir, 'monkey', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(check_file, expected=False)
def test_cache_writing_updates_features(self): '''test cache writing updates features''' features_file = testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(features_file) self.compare_features_file(features_file)
def test_cache_writing_does_not_overwrite_features_when_features_differ(self): '''test cache writing does not overwrite the features files when it differs and --skip-bad-cache is given''' features_file = testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '--skip-bad-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(features_file) # ensure that the features does *not* match the current features set self.compare_features_file(features_file, expected=False)
def test_cache_writing_updates_features(self): '''test cache writing updates features''' self.require_apparmorfs() features_file = testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(features_file) self.compare_features_file(features_file)
def setUp(self): '''setup for each test''' global config # REPORT ALL THE OUTPUT self.maxDiff = None self.tmp_dir = tempfile.mkdtemp(prefix='aa-caching-') os.chmod(self.tmp_dir, 0o755) # write our sample abstraction and profile out self.abstraction = testlib.write_file(self.tmp_dir, ABSTRACTION, ABSTRACTION_CONTENTS) self.profile = testlib.write_file(self.tmp_dir, PROFILE, PROFILE_CONTENTS) if config.debug: self.do_cleanup = False self.debug = True # Warnings break the test harness, but chroots may not be setup # to have the config file, etc. self.cmd_prefix = [ config.parser, '--config-file=./parser.conf', '--base', self.tmp_dir, '--skip-kernel-load' ] if not self.is_apparmorfs_mounted(): self.cmd_prefix += ['-M', './features_files/features.all'] # Otherwise get_cache_dir() will try to create /var/cache/apparmor # and will fail when the test suite is run as non-root. self.cmd_prefix += ['--cache-loc', os.path.join(self.tmp_dir, 'cache')] # create directory for cached blobs # NOTE: get_cache_dir() requires cmd_prefix to be fully initialized self.cache_dir = self.get_cache_dir(create=True) # default path of the output cache file self.cache_file = os.path.join(self.cache_dir, PROFILE)
def test_cache_writing_does_not_overwrite_features_when_features_differ(self): '''test cache writing does not overwrite the features files when it differs and --skip-bad-cache is given''' self.require_apparmorfs() features_file = testlib.write_file(self.cache_dir, '.features', 'monkey\n') cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '--skip-bad-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(features_file) # ensure that the features does *not* match the current features set self.compare_features_file(features_file, expected=False)
def test_cache_writing_updates_cache_file(self): '''test cache writing updates cache file''' cache_file = testlib.write_file(self.cache_dir, PROFILE, 'monkey\n') orig_stat = os.stat(cache_file) cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(cache_file) stat = os.stat(cache_file) # We check sizes here rather than whether the string monkey is # in cache_contents because of the difficulty coercing cache # file bytes into strings in python3 self.assertNotEquals(orig_stat.st_size, stat.st_size, 'Expected cache file to be updated, size is not changed.') self.assertEquals(os.stat(self.profile).st_mtime, stat.st_mtime)
def test_cache_writing_updates_cache_file(self): '''test cache writing updates cache file''' cache_file = testlib.write_file(self.cache_dir, PROFILE, 'monkey\n') orig_size = os.stat(cache_file).st_size cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(cache_file) with open(cache_file, 'rb') as f: new_size = os.fstat(f.fileno()).st_size # We check sizes here rather than whether the string monkey is # in cache_contents because of the difficulty coercing cache # file bytes into strings in python3 self.assertNotEquals(orig_size, new_size, 'Expected cache file to be updated, size is not changed.')
def test_cache_writing_collision_of_features(self): '''test cache writing collision of features''' # cache dir with different features causes a collision resulting # in a new cache dir self.require_apparmorfs() features_file = testlib.write_file(self.cache_dir, '.features', 'monkey\n') new_file = self.get_cache_dir() new_features_file = new_file + '/.features' cmd = list(self.cmd_prefix) cmd.extend(['-v', '--write-cache', '-r', self.profile]) self.run_cmd_check(cmd, expected_string='Replacement succeeded for') self.assert_path_exists(features_file) self.assert_path_exists(new_features_file) self.compare_features_file(new_features_file)