"README.md" did not exist on "4aa9166e7f83f33ef9d806f790e1ddb4f1627e8f"
Newer
Older
#!/usr/bin/python
#
# Requirement:
# The command "ssh locahost" completes successfully without requiring any user input (e.g. password input)
# This can be achieved by adding your own public key to .ssh/authorized_keys
import settings
import systemtest.testcase
import time
import filecmp
import os
import shutil
ARCHIVE_DIR="/tmp/integration-tests/archiving/rsync-archive"
class TestCase(systemtest.testcase.TestCase):
def execute(self):
self.installOpenbis()
# Step 1 - Expect new data set to be archived
# Recreating an empty archive directory
self.clean_archive()
openbisController = self.createOpenbisController()
openbisController.createTestDatabase("openbis")
openbisController.allUp()
# Drop data set and wait for the archiving process
openbisController.dropAndWait("ARCHIVE_DATASET", "incoming-jython")
time.sleep(15)
openbisController.dssDown()
self._addToRunningInstances(openbisController)
archived_data_set_dir = self.asserts_step1(openbisController)
# Step 2 - Damage archive copy and expect the Rsync archiver to detect the error
self.prepare_step_2(openbisController, archived_data_set_dir)
openbisController.dssUp()
time.sleep(15)
self.asserts_step2( openbisController, archived_data_set_dir)
shutil.rmtree(ARCHIVE_DIR, ignore_errors=True)
#
# Step 1 - Verification
#
def asserts_step1(self, openbisController):
self.assert_last_dataset_content_in_database(openbisController, "AVAILABLE", "t")
archived = self.find_directory_in_archive()
self.assert_the_same_content("Compare assert dataset content", openbisController.dataFile("ARCHIVE_DATASET"), archived)
return archived
def assert_last_dataset_content_in_database(self, openbisController, status, archived):
util.printAndFlush("==== assert correct last dataset content in database with pattern %s, %s ====" % (status, archived))
queryResult = openbisController.queryDatabase("openbis",
"select d.code, ed.status, ed.present_in_archive from data as d left join external_data as ed on ed.id = d.id where d.id = (select max(id) from data)")
result = queryResult[0]
self.assertEquals("Last dataset pattern %s" % result, status, result[1])
self.assertEquals("Last dataset pattern %s" % result, archived, result[2])
def find_directory_in_archive(self):
return self.find_matching_file_in_directory_tree(ARCHIVE_DIR, "ARCHIVE_DATASET")
def assert_the_same_content(self, message, path1, path2):
dc = filecmp.dircmp(path1,path2,ignore=['.svn'])
if dc.left_only or dc.right_only or dc.diff_files or dc.funny_files:
dc.report_full_closure()
self.fail(message)
#
# Step 2
#
def prepare_step_2(self, openbisController, archived_data_set_dir):
self.damage_archive(archived_data_set_dir)
self.unset_presentInArchiveFlag_DB(openbisController)
def damage_archive(self, archived_data_set_dir):
util.printAndFlush("Inserting invalid content in the archived dataset copy...")
path_in_archive = os.path.join(archived_data_set_dir, "archive-me.txt")
with open(path_in_archive, "a") as f:
f.write("INVALID CONTENT AT THE END OF ARCHIVE")
util.printAndFlush("updated %s" % path_in_archive)
def reconfigure_archiver(self, openbisController):
util.printAndFlush("Reconfiguring archiver to remove datasets from store ....")
archiver_core_plugin_properties = "openbis/1/dss/maintenance-tasks/auto-archiver/plugin.properties"
src = os.path.join(openbisController.dataFile("core-plugins"), archiver_core_plugin_properties)
dst = os.path.join(openbisController.installPath, "servers", "core-plugins", archiver_core_plugin_properties)
shutil.copyfile(src, dst)
def unset_presentInArchiveFlag_DB(self, openbisController):
openbisController.queryDatabase("openbis", "update external_data set present_in_archive=false")
#
# Step 2 - Verification
#
def asserts_step2(self, openbisController, archived_data_set_dir):
self.assert_last_dataset_content_in_database(openbisController, "ARCHIVED", "t")
self.assert_the_same_content("Compare assert dataset content", openbisController.dataFile("ARCHIVE_DATASET"), archived_data_set_dir)
dataset_file = self.find_dataset_in_store(openbisController)
if dataset_file is not None:
self.fail("The dataset file should not be found in the store")
def find_dataset_in_store(self, openbisController):
return self.find_matching_file_in_directory_tree(openbisController.storeDirectory(), "ARCHIVE_DATASET")
def find_matching_file_in_directory_tree(self, directory, file_name):
matches = []
for root, dirnames, filenames in os.walk(directory):
if file_name in dirnames:
return os.path.join(root, file_name)
return None
TestCase(settings, __file__).runTest()