def testPmQuery(self): # test the default value when not specified s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('pm_query') ) self.assertEqual( cfg['pm_query'], False ) # test with enterprise specified s = """{ "name" : "e-cluster", "idbversion" : "4.5.0-1", "boxtype" : "cal-precise64", "pm_query" : true, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('pm_query') ) self.assertEqual( cfg['pm_query'], True ) # now test an invalid config s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "pm_query" : true, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) with self.assertRaisesRegexp(Exception,"PM local query option only supported.*"): cfg.validate()
def testNonroot(self): # test the default value when not specified s = """{ "name" : "a-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 4, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('idbuser') ) self.assertEqual( cfg['idbuser'], 'root' ) self.assertEqual(cfg.infinidb_install_dir(), '/usr/local/Calpont') s = """{ "name" : "a-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "idbuser" : "calpont", "rolespec" : { "pm" : { "count" : 4, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('idbuser') ) self.assertEqual( cfg['idbuser'], 'calpont' ) self.assertEqual(cfg.infinidb_install_dir(), '/home/calpont/Calpont')
def testHadoop(self): # test a success path s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64-hadoop", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } }, "hadoop" : { "instance-templates" : "1 hadoop-namenode+hadoop-jobtracker,2 hadoop-datanode+hadoop-tasktracker" } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('hadoop') ) self.assertEqual( cfg['hadoop']['instance-templates'], "1 hadoop-namenode+hadoop-jobtracker,2 hadoop-datanode+hadoop-tasktracker" ) # test hadoop without any hadoop attributes, to simulate # the usage for an EM type install s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64-hadoop", "upgrade" : "3.5.2-2", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } }, "hadoop" : { } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('hadoop') ) # test invalid boxtype s = """{
def testEnterprise(self): # test the default value when not specified s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('enterprise') ) self.assertEqual( cfg['enterprise'], True ) # test with enterprise specified s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "enterprise" : false, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('enterprise') ) self.assertEqual( cfg['enterprise'], False )
def testUpgrade(self): # test the default value when not specified s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('upgrade') ) self.assertEqual( cfg['upgrade'], '' ) # test with external storage enabled s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "upgrade" : "3.5.2-2", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('upgrade') ) self.assertEqual( cfg['upgrade'], '3.5.2-2' )
def testHadoop(self): # test a success path s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64-hadoop", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } }, "hadoop" : { "instance-templates" : "1 hadoop-namenode+hadoop-jobtracker,2 hadoop-datanode+hadoop-tasktracker" } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('hadoop') ) self.assertEqual( cfg['hadoop']['instance-templates'], "1 hadoop-namenode+hadoop-jobtracker,2 hadoop-datanode+hadoop-tasktracker" )
def testExtstore(self): # test the default value when not specified s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('storage') ) self.assertEqual( cfg['storage'], 'internal' ) # test with external storage enabled s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "storage" : "external", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('storage') ) self.assertEqual( cfg['storage'], 'external' ) # test incorrect setting for external storage flag s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "storage" : true, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ with self.assertRaisesRegexp(Exception,"ConfigSpec has wrong type for attribute storage.*"): cfg = ConfigSpec(s)
def testBinary(self): # test the default value when not specified s = """{ "name" : "a-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 4, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('binary') ) self.assertFalse( cfg['binary'] ) s = """{ "name" : "a-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "binary" : true, "rolespec" : { "pm" : { "count" : 4, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('binary') ) self.assertTrue( cfg['binary'] ) s = """{ "name" : "a-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "binary" : false, "rolespec" : { "pm" : { "count" : 4, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('binary') ) self.assertFalse( cfg['binary'] ) s = """{ "name" : "a-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "idbuser" : "calpont", "binary" : "true", "rolespec" : { "pm" : { "count" : 4, "memory" : 1024, "dbroots_per" : 2 }, "um" : { "count" : 1, "memory" : 1024 } } } """ with self.assertRaisesRegexp(Exception,"ConfigSpec has wrong type for attribute binary.*"): cfg = ConfigSpec(s)
def testEm(self): # test the default value when not specified s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('em') ) self.assertEqual( cfg['em'], None ) # test with em option s = """{ "name" : "e-cluster", "idbversion" : "4.5.0-1", "boxtype" : "cal-precise64", "em" : { "present" : true }, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('em') ) self.assertEqual( cfg['em']['present'], True ) self.assertEqual( cfg['em']['emhost'], 'localhost' ) self.assertEqual( cfg['em']['emport'], 9090 ) self.assertEqual( cfg['em']['oamserver_role'], 'um1' ) self.assertEqual( cfg['em']['invm'], False ) self.assertFalse( cfg['em'].has_key('boxtype') ) self.assertFalse( cfg['em'].has_key('version') ) # test with fully specified em option s = """{ "name" : "e-cluster", "idbversion" : "4.5.0-1", "boxtype" : "cal-precise64", "em" : { "present" : true, "emhost" : "testhost", "emport" : 7120, "oamserver_role" : "pm1" }, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) self.assertTrue( cfg.has_key('em') ) self.assertEqual( cfg['em']['present'], True ) self.assertEqual( cfg['em']['emhost'], 'testhost' ) self.assertEqual( cfg['em']['emport'], 7120 ) self.assertEqual( cfg['em']['oamserver_role'], 'pm1' ) self.assertEqual( cfg['em']['invm'], False ) # now test an invalid config s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "em" : { "foo" : "bar" }, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ with self.assertRaisesRegexp(Exception,"Must specify present flag.*"): cfg = ConfigSpec(s) # now test an invalid config s = """{ "name" : "e-cluster", "idbversion" : "3.5.1-4", "boxtype" : "cal-precise64", "em" : { "present" : true }, "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ cfg = ConfigSpec(s) with self.assertRaisesRegexp(Exception,"Enterprise Manager.*only supported.*"): cfg.validate() # test the whether the global empresent property works s = """{ "name" : "e-cluster", "idbversion" : "4.5.0-1", "boxtype" : "cal-centos6", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ common.props['cluster.cluster.empresent'] = True try: cfg = ConfigSpec(s) except Exception, exc: common.props['cluster.cluster.empresent'] = False raise exc
"idbversion" : "4.5.0-1", "boxtype" : "cal-centos6", "rolespec" : { "pm" : { "count" : 2, "memory" : 1024, "dbroots_per" : 2 } } } """ common.props['cluster.cluster.eminvm'] = True try: cfg = ConfigSpec(s) except Exception, exc: common.props['cluster.cluster.eminvm'] = False raise exc common.props['cluster.cluster.eminvm'] = False self.assertTrue( cfg.has_key('em') ) self.assertEqual( cfg['em']['present'], True ) self.assertEqual( cfg['em']['emhost'], 'localhost' ) self.assertEqual( cfg['em']['emport'], 9090 ) self.assertEqual( cfg['em']['oamserver_role'], 'um1' ) self.assertEqual( cfg['em']['invm'], True ) self.assertEqual( cfg['em']['boxtype'], 'cluster' ) self.assertEqual( cfg['em']['version'], 'Latest' ) if __name__ == "__main__": #import sys;sys.argv = ['', 'Test.testName'] unittest.main()