def _get_db_accessor(): #TODO singleton? aws_key = Credential() db_configs = DBConfigParser() db = DBAccessor() db.connect(db_configs.get_dynamodb_region(), aws_key.get_aws_access_key(), aws_key.get_aws_secret_key()) db.table_init(db_configs.get_dynamodb_tables()['image_table'], db_configs.get_dynamodb_tables()['tree_table'], db_configs.get_dynamodb_tables()['history_table']) return db
def launch(self): sha1 = os.environ['COMMIT_ID'] comment = os.environ['CI_MESSAGE'] (committer, diff_list) = self._git.get_commit_diff_info() db_configs = DBConfigParser() db = DBAccessor() db.connect(db_configs.get_dynamodb_region(), self._aws_key.get_aws_access_key(), self._aws_key.get_aws_secret_key()) db.table_init(db_configs.get_dynamodb_tables()['image_table'], db_configs.get_dynamodb_tables()['tree_table'], db_configs.get_dynamodb_tables()['history_table']) for diff_file in diff_list: if self._is_template(diff_file): template = os.path.join(self._git.get_repo(), diff_file) # main program if self._validate(diff_file): ami_name = self._get_image_name(diff_file) self._launch_amipacker_series(db, ami_name, template, sha1, committer.name, committer.email, comment, True, ami_name) else: return "Image File: %s\nCommitter: %s<%s>" % (diff_file, committer.name, committer.email) return None
def test_get_latest_version(self): conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_image("first_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0002", "xyz", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("third_kid", "root", "0003", "zxcv", "test comment", "2014-06-05", "msfuko") self.assertEqual("0001", self.db.get_version("first_kid")) self.assertEqual("0002", self.db.get_version("second_kid")) self.assertEqual("0003", self.db.get_version("third_kid"))
def test_add_or_update_tree_node(self): #prepare table conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_tree_node("first_kid", "one") self.db.add_or_update_tree_node("second_kid", "one") self.db.add_or_update_tree_node("third_kid", "one") self.db.add_or_update_tree_node("fourth_kid", "first_kid") self.db.add_or_update_tree_node("five_kid", "first_kid") self.assertEqual(3, len(self.db.get_tree_children("root"))) self.assertEqual(2, len(self.db.get_tree_children("first_kid"))) self.assertEqual(0, len(self.db.get_tree_children("second_kid"))) self.assertEqual(0, len(self.db.get_tree_children("not_kid")))
def test_add_or_update_image(self): # set up mock conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) # test add & update self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_image("first_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.assertEqual(2, self._get_item_count(self.db.image_table)) self.db.add_or_update_image("second_kid", "root", "0002", "xyz", "test comment", "2014-06-05", "msfuko") self.assertEqual(2, self._get_item_count(self.db.image_table)) self.db.add_or_update_image("third_kid", "root", "0003", "zxcv", "test comment", "2014-06-05", "msfuko") self.assertEqual(3, self._get_item_count(self.db.image_table)) self.assertEqual("0002", self.db.get_version("second_kid")) self.assertEqual(None, self.db.get_version("not_kid")) self.assertEqual(2, len(self.db.get_node_history("second_kid", 2))) self.assertEqual(1, len(self.db.get_node_history("second_kid", 1))) self.assertEqual(2, len(self.db.get_node_history("second_kid", 3))) self.assertEqual("0002", self.db.get_node_history("second_kid", "0003")[0]['version'])
class DynamoDBTest(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def _get_item_count(self, table): items = table.scan() count = 0 for item in items: count += 1 return count def _prepare_table(self, conn): conn.create_table(name='dcs_images', schema=conn.create_schema(hash_key_name='name', hash_key_proto_value=str), read_units=5, write_units=5) conn.create_table(name='image_history', schema=conn.create_schema(hash_key_name='name', hash_key_proto_value=str, range_key_name='version', range_key_proto_value=str), read_units=5, write_units=5) conn.create_table(name='image_tree', schema=conn.create_schema(hash_key_name='name', hash_key_proto_value=str), read_units=5, write_units=5) @mock_dynamodb def test_add_or_update_image(self): # set up mock conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) # test add & update self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_image("first_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.assertEqual(2, self._get_item_count(self.db.image_table)) self.db.add_or_update_image("second_kid", "root", "0002", "xyz", "test comment", "2014-06-05", "msfuko") self.assertEqual(2, self._get_item_count(self.db.image_table)) self.db.add_or_update_image("third_kid", "root", "0003", "zxcv", "test comment", "2014-06-05", "msfuko") self.assertEqual(3, self._get_item_count(self.db.image_table)) self.assertEqual("0002", self.db.get_version("second_kid")) self.assertEqual(None, self.db.get_version("not_kid")) self.assertEqual(2, len(self.db.get_node_history("second_kid", 2))) self.assertEqual(1, len(self.db.get_node_history("second_kid", 1))) self.assertEqual(2, len(self.db.get_node_history("second_kid", 3))) self.assertEqual("0002", self.db.get_node_history("second_kid", "0003")[0]['version']) @mock_dynamodb def test_add_or_update_tree_node(self): #prepare table conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_tree_node("first_kid", "one") self.db.add_or_update_tree_node("second_kid", "one") self.db.add_or_update_tree_node("third_kid", "one") self.db.add_or_update_tree_node("fourth_kid", "first_kid") self.db.add_or_update_tree_node("five_kid", "first_kid") self.assertEqual(3, len(self.db.get_tree_children("root"))) self.assertEqual(2, len(self.db.get_tree_children("first_kid"))) self.assertEqual(0, len(self.db.get_tree_children("second_kid"))) self.assertEqual(0, len(self.db.get_tree_children("not_kid"))) @mock_dynamodb def test_get_all_images(self): conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_image("first_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0002", "xyz", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("third_kid", "root", "0003", "zxcv", "test comment", "2014-06-05", "msfuko") images = self.db.get_all_image_name() self.assertEqual(3, len(images)) self.assertTrue('first_kid' in images) self.assertTrue('second_kid' in images) self.assertTrue('third_kid' in images) @mock_dynamodb def test_get_latest_version(self): conn = boto.connect_dynamodb() self._prepare_table(conn) self.assertEqual(3, len(conn.list_tables())) self.db = DBAccessor() self.db.connect(conn=conn) self.db.table_init('dcs_images', 'image_tree', 'image_history') self.db.add_or_update_image("first_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0001", "abcde", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("second_kid", "root", "0002", "xyz", "test comment", "2014-06-05", "msfuko") self.db.add_or_update_image("third_kid", "root", "0003", "zxcv", "test comment", "2014-06-05", "msfuko") self.assertEqual("0001", self.db.get_version("first_kid")) self.assertEqual("0002", self.db.get_version("second_kid")) self.assertEqual("0003", self.db.get_version("third_kid"))