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
Esempio n. 2
0
    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
Esempio n. 3
0
    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")) 
                         
Esempio n. 4
0
    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")))
Esempio n. 5
0
    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'])
Esempio n. 6
0
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"))