diff --git a/src/image/test/ImagePoolTest.cc b/src/image/test/ImagePoolTest.cc
index 2c30d69172..4b59c20413 100644
--- a/src/image/test/ImagePoolTest.cc
+++ b/src/image/test/ImagePoolTest.cc
@@ -47,11 +47,11 @@ const string templates[] =
const string xmls[] =
{
- "0122Image one00000000000source_prefix/b734e8645d3eba91315e851662adf021ee488e3400",
+ "0122Image one00000000000source_prefix/b734e8645d3eba91315e851662adf021ee488e3400",
- "1262Second Image00000000000source_prefix/24939d280a0e29c9eb00bbb7c5e997ba5c4b866700",
+ "1262Second Image00000000000source_prefix/24939d280a0e29c9eb00bbb7c5e997ba5c4b866700",
- "0127The third image00000000000source_prefix/b690e963a810b60538b70784697b5183807f84ff00"
+ "0127The third image00000000000source_prefix/b690e963a810b60538b70784697b5183807f84ff00"
};
@@ -79,6 +79,9 @@ class ImagePoolTest : public PoolTest
CPPUNIT_TEST ( wrong_get_name );
CPPUNIT_TEST ( duplicates );
CPPUNIT_TEST ( extra_attributes );
+ CPPUNIT_TEST ( wrong_templates );
+ CPPUNIT_TEST ( target_generation );
+ CPPUNIT_TEST ( bus_assignment );
CPPUNIT_TEST ( dump );
CPPUNIT_TEST ( dump_where );
@@ -93,7 +96,7 @@ protected:
PoolSQL* create_pool(SqlDB* db)
{
- return new ImagePool(db, "source_prefix", "OS", "IDE");
+ return new ImagePool(db, "source_prefix", "OS", "hd");
};
int allocate(int index)
@@ -292,6 +295,171 @@ public:
CPPUNIT_ASSERT( value == "STUDENT" );
}
+ void wrong_templates()
+ {
+ int rc;
+ ImagePool * imp = static_cast(pool);
+
+ string templates[] =
+ {
+ "ORIGINAL_PATH = /tmp/image_test\n"
+ "DESCRIPTION = \"This template lacks name!\"\n",
+
+ "NAME = \"name A\"\n"
+ "ORIGINAL_PATH = /tmp/image_test\n"
+ "TYPE = WRONG\n",
+
+ "NAME = \"name B\"\n"
+ "TYPE = DATABLOCK\n"
+ "DESCRIPTION = \"This type doesn't need original_path\"\n",
+
+ "NAME = \"name C\"\n"
+ "TYPE = CDROM\n"
+ "DESCRIPTION = \"This type needs original_path\"\n",
+
+ "NAME \"PARSE ERROR\"\n"
+ "TYPE = WRONG\n",
+
+ "END"
+ };
+
+ int results[] = { -1, -1, 0, -1, -2 };
+
+ int i = 0;
+ while( templates[i] != "END" )
+ {
+
+ imp->allocate(0, templates[i], &rc);
+
+//cout << endl << i << " - rc: " << rc << " expected: " << results[i] << endl;
+
+ CPPUNIT_ASSERT( rc == results[i] );
+
+ i++;
+ }
+ }
+
+ void target_generation()
+ {
+ ImagePool * imp = static_cast(pool);
+ Image * img;
+
+ VectorAttribute * disk;
+ int oid;
+ string value;
+
+ disk = new VectorAttribute("DISK");
+
+ // Allocate an OS type image
+ oid = allocate(0);
+ img = imp->get(oid, false);
+
+ img->get_disk_attribute(disk, 0);
+
+ value = disk->vector_value("TARGET");
+
+ CPPUNIT_ASSERT( value == "hda" );
+
+
+ // clean up
+ delete disk;
+ value = "";
+
+ // This time, set a target for this disk
+ disk = new VectorAttribute("DISK");
+ disk->replace("TARGET", "sdw");
+
+ img->get_disk_attribute(disk, 0);
+
+ value = disk->vector_value("TARGET");
+ CPPUNIT_ASSERT(value == "sdw");
+
+
+ // clean up
+ delete disk;
+ value = "";
+
+ disk = new VectorAttribute("DISK");
+
+ // Allocate a CDROM type image
+ string templ = "NAME = \"name A\" TYPE = CDROM ORIGINAL_PATH = /tmp";
+ imp->allocate(0, templ, &oid);
+
+ CPPUNIT_ASSERT(oid >= 0);
+
+ img = imp->get(oid, false);
+
+ img->get_disk_attribute(disk, 0);
+
+ value = disk->vector_value("TARGET");
+ CPPUNIT_ASSERT(value == "hdc");
+
+
+
+ // clean up
+ delete disk;
+ value = "";
+
+ disk = new VectorAttribute("DISK");
+
+ // Allocate a DATABLOCK type image
+ templ = "NAME = \"name B\" TYPE = DATABLOCK";
+ imp->allocate(0, templ, &oid);
+
+ CPPUNIT_ASSERT(oid >= 0);
+
+ img = imp->get(oid, false);
+
+ img->get_disk_attribute(disk, 0);
+
+ value = disk->vector_value("TARGET");
+ CPPUNIT_ASSERT(value == "hdd");
+
+
+ // clean up
+ delete disk;
+ value = "";
+
+ disk = new VectorAttribute("DISK");
+
+ // Allocate a DATABLOCK type image
+ templ = "NAME = \"name C\" TYPE = DATABLOCK DEV_PREFIX = \"sd\"";
+ imp->allocate(0, templ, &oid);
+
+ CPPUNIT_ASSERT(oid >= 0);
+
+ img = imp->get(oid, false);
+
+ img->get_disk_attribute(disk, 2);
+
+ value = disk->vector_value("TARGET");
+ CPPUNIT_ASSERT(value == "sdf");
+
+ }
+
+
+ void bus_assignment()
+ {
+ ImagePool * imp = static_cast(pool);
+ Image * img;
+
+ VectorAttribute * disk;
+ int oid;
+ string value;
+
+ disk = new VectorAttribute("DISK");
+ disk->replace("BUS", "SCSI");
+
+ // Allocate an OS type image
+ oid = allocate(0);
+ img = imp->get(oid, false);
+
+ img->get_disk_attribute(disk, 0);
+
+ value = disk->vector_value("BUS");
+ CPPUNIT_ASSERT( value == "SCSI" );
+ }
+
void dump()
{