⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 repositorymix.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 CPP
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================//// Author: Jim Wunderlich (Jim_Wunderlich@prodigy.net)//// Modified By: David Dillard, VERITAS Software Corp.//                  (david.dillard@veritas.com)////%/////////////////////////////////////////////////////////////////////////////#include <Pegasus/Common/Config.h>#include <Pegasus/Common/PegasusAssert.h>#include <Pegasus/Repository/CIMRepository.h>#include <Pegasus/Common/XmlWriter.h>#include <Pegasus/Common/MofWriter.h>#include <Pegasus/Common/CIMPropertyList.h>PEGASUS_USING_PEGASUS;PEGASUS_USING_STD;static char * verbose;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////String repositoryRoot;CIMRepository *r;const CIMNamespaceName NS = CIMNamespaceName ("TestCreateClass");CIMQualifier d(CIMName("description"), String("*REMOVED*"));const char *ProgName;void TestOpenRepo(Uint32 mode){  if (verbose) cout << ProgName << "-TestOpenRepo()" << endl;  // -- Create repository and "xyz" namespace:    r = new CIMRepository(repositoryRoot, mode);}void TestCloseRepo(){  if (verbose) cout << ProgName << "-TestCloseRepo()" << endl;  // -- close  repository   delete  r;}void TestInitRepo(){  if (verbose) cout << ProgName << "-TestInitRepo()" << endl;    try    {	r->createNameSpace(NS);    }    catch (AlreadyExistsException&)    {	// Ignore this!    }    // -- Declare the key qualifier:    r->setQualifier(NS, CIMQualifierDecl(CIMName ("key"),true,CIMScope::PROPERTY));    r->setQualifier(NS, CIMQualifierDecl(CIMName ("description"),String(),(CIMScope::PROPERTY + CIMScope::CLASS)));    r->setQualifier(NS, CIMQualifierDecl(CIMName ("junk"),String(),(CIMScope::PROPERTY + CIMScope::CLASS)));}void TestCreateClass(){  if (verbose) cout << ProgName << "-TestCreateClass()" << endl;    CIMClass c1(CIMName ("SuperClass"));    c1.addQualifier(d);    c1.addProperty(		   CIMProperty(CIMName ("key"), Uint32(0))		   .addQualifier(CIMQualifier(CIMName ("key"), true)));    c1.addProperty(CIMProperty(CIMName ("ratio"), Real32(1.5)));    c1.addProperty(CIMProperty(CIMName ("message"), String("Hello World")));    // -- Create the class (get it back and compare):    r->createClass(NS, c1);    CIMConstClass cc1;    cc1 = r->getClass(NS, CIMName ("SuperClass"),true,true, true);    PEGASUS_TEST_ASSERT(c1.identical(cc1));    PEGASUS_TEST_ASSERT(cc1.identical(c1));    // -- Now create a sub class (get it back and compare):	// c22 has one additional property than c1 (junk)    CIMClass c2(CIMName ("SubClass"), CIMName ("SuperClass"));	// Add new qualifier that will be local	CIMQualifier j(CIMName("junk"), String("TestQualifier"));	c2.addQualifier(j);    c2.addProperty(CIMProperty(CIMName ("junk"), Real32(66.66)));    r->createClass(NS, c2);    CIMConstClass cc2;    cc2 = r->getClass(NS, CIMName ("SubClass"), false, true, true);	//XmlWriter::printClassElement(c2);	//XmlWriter::printClassElement(cc2);    	PEGASUS_TEST_ASSERT(c2.identical(cc2));    PEGASUS_TEST_ASSERT(cc2.identical(c2));    // -- Modify "SubClass" (add new property)    c2.addProperty(CIMProperty(CIMName ("newProperty"), Uint32(888)));    r->modifyClass(NS, c2);    cc2 = r->getClass(NS, CIMName ("SubClass"), false, true, true);    PEGASUS_TEST_ASSERT(c2.identical(cc2));    PEGASUS_TEST_ASSERT(cc2.identical(c2));    // should test for this new property on "SubClass" also.}void TestEnumerateClass(){  if (verbose) cout << ProgName << "-TestEnumerateClass()" << endl;    // -- Enumerate the class names: expect "SuperClass", "SubClass"    Array<CIMName> classNames = r->enumerateClassNames(NS, CIMName (), true);	if (verbose)	{	  cout << ProgName << "-Enumerated class names: ";		for (Uint32 i = 0 ; i < classNames.size(); i++)		{		  cout << classNames[i].getString() << ", ";		}	  cout << endl;	}    BubbleSort(classNames);    PEGASUS_TEST_ASSERT(classNames.size() == 2);    PEGASUS_TEST_ASSERT(classNames[1] == CIMName ("SuperClass"));    PEGASUS_TEST_ASSERT(classNames[0] == CIMName ("SubClass"));}void TestCreateInstance1(){  if (verbose) cout << ProgName << "-TestCreateInstance1()" << endl;    // -- Create an instance of each class:    CIMInstance inst0(CIMName ("SuperClass"));    inst0.addProperty(CIMProperty(CIMName ("key"), Uint32(1)));    r->createInstance(NS, inst0);    CIMInstance inst1(CIMName ("SubClass"));    inst1.addProperty(CIMProperty(CIMName ("key"), Uint32(2)));    r->createInstance(NS, inst1);}void TestCreateInstance2(){  if (verbose) cout << ProgName << "-TestCreateInstance2()" << endl;    // -- Create an instance of each class:    CIMInstance inst0(CIMName ("SuperClass"));    inst0.addProperty(CIMProperty(CIMName ("key"), Uint32(11)));    r->createInstance(NS, inst0);    CIMInstance inst1(CIMName ("SubClass"));    inst1.addProperty(CIMProperty(CIMName ("key"), Uint32(22)));    r->createInstance(NS, inst1);}void TestCreateInstance3(){  if (verbose) cout << ProgName << "-TestCreateInstance3()" << endl;    // -- Create an instance of each class:    CIMInstance inst0(CIMName ("SuperClass"));    inst0.addProperty(CIMProperty(CIMName ("key"), Uint32(111)));    r->createInstance(NS, inst0);    CIMInstance inst1(CIMName ("SubClass"));    inst1.addProperty(CIMProperty(CIMName ("key"), Uint32(222)));    r->createInstance(NS, inst1);}void TestCreateInstance4(){  if (verbose) cout << ProgName << "-TestCreateInstance4()" << endl;    // -- Create an instance of each class:    CIMInstance inst0(CIMName ("SuperClass"));    inst0.addProperty(CIMProperty(CIMName ("key"), Uint32(1111)));    r->createInstance(NS, inst0);    CIMInstance inst1(CIMName ("SubClass"));    inst1.addProperty(CIMProperty(CIMName ("key"), Uint32(2222)));    r->createInstance(NS, inst1);}void TestCreateInstance5(){  if (verbose) cout << ProgName << "-TestCreateInstance5()" << endl;    // -- Create an instance of each class:    CIMInstance inst0(CIMName ("SuperClass"));    inst0.addProperty(CIMProperty(CIMName ("key"), Uint32(11111)));    r->createInstance(NS, inst0);    CIMInstance inst1(CIMName ("SubClass"));    inst1.addProperty(CIMProperty(CIMName ("key"), Uint32(22222)));    r->createInstance(NS, inst1);}void TestEnumerateInstance(Uint32 num){  if (verbose) cout << ProgName << "-TestEnumerateInstance()" << endl;    // -- Enumerate instances names:    Array<CIMObjectPath> instanceNames = 	r->enumerateInstanceNamesForSubtree(NS, CIMName ("SuperClass"));	if (verbose)	{	  cout << ProgName << "-Enumerated instance names: ";		for (Uint32 i = 0 ; i < instanceNames.size(); i++)		{		  cout << instanceNames[i].toString() << ", ";		}	  cout << endl;	}    PEGASUS_TEST_ASSERT(instanceNames.size() == num*2);}void TestEnumerateInstances(Uint32 num){  if (verbose) cout << ProgName << "-TestEnumerateInstances()" << endl;    // -- Enumerate instances:    Array<CIMInstance> namedInstances = r->enumerateInstancesForSubtree(NS,        CIMName ("SuperClass"),true,false, true, true);#ifdef NOTDEF    // defined out becuase it is very verbose	if (verbose)	{	  cout << ProgName << "-Enumerated instance names: ";		for (Uint32 i = 0 ; i < namedInstances.size(); i++)		{		  cout << ((CIMObject )namedInstances[i]).toString() << ", ";		}	  cout << endl;	}#endif    PEGASUS_TEST_ASSERT(namedInstances.size() == num*2);}void TestEnumerateInstancesForClass(Uint32 num){  if (verbose) cout << ProgName << "-TestEnumerateInstancesForClass()" << endl;    // test the enumerateInstancesForClass function    Array<CIMInstance>  namedInstances = r->enumerateInstancesForClass(NS,         CIMName("SuperClass"), false, true, true);#ifdef NOTDEF    // defined out becuase it is very verbose	if (verbose)	{	  cout << ProgName << "-Enumerated instancs for Class-SuperClass: ";		for (Uint32 i = 0 ; i < namedInstances.size(); i++)		{		  cout << ((CIMObject )namedInstances[i]).toString() << ", ";		}	  cout << endl;	}#endif    PEGASUS_TEST_ASSERT(namedInstances.size() == num);    namedInstances = r->enumerateInstancesForClass(NS,         CIMName("SubClass"), false, true, true);#ifdef NOTDEF    // defined out becuase it is very verbose	if (verbose)	{	  cout << ProgName << "-Enumerated instancs for Class-SubClass: ";		for (Uint32 i = 0 ; i < namedInstances.size(); i++)		{		  cout << ((CIMObject )namedInstances[i]).toString() << ", ";		}	  cout << endl;	}#endif    PEGASUS_TEST_ASSERT(namedInstances.size() == num);}void TestQualifiers(){    // -- Create repository and "xyz" namespace:    const CIMNamespaceName NS = CIMNamespaceName ("TestQualifiers");    try    {	r->createNameSpace(NS);    }    catch (AlreadyExistsException&)    {	// Ignore this!    }    // -- Construct a qualifier declaration:    CIMQualifierDecl q(CIMName ("abstract"), true, CIMScope::CLASS);    r->setQualifier(NS, q);    CIMQualifierDecl qq = r->getQualifier(NS, CIMName ("abstract"));    PEGASUS_TEST_ASSERT(qq.identical(q));    PEGASUS_TEST_ASSERT(q.identical(qq));    // -- Delete the qualifier:    r->deleteQualifier(NS, CIMName ("abstract"));    // -- Delete the namespace:    r->deleteNameSpace(NS);}int main(int argc, char** argv){    verbose = getenv("PEGASUS_TEST_VERBOSE");    ProgName = argv[0];    const char* tmpDir = getenv ("PEGASUS_TMP");    if (tmpDir == NULL)    {        repositoryRoot = ".";    }    else    {        repositoryRoot = tmpDir;    }    repositoryRoot.append("/repository");    try     {      Uint32 mode;      Uint32 modeother;      int mixed_mode;      if (!strcmp(argv[1],"XML") )	{	  mode = CIMRepository::MODE_XML;	  modeother = CIMRepository::MODE_BIN;	  mixed_mode = 0;	  if (verbose) cout << ProgName<< ": Single test using XML mode repository" << endl;	}      else if (!strcmp(argv[1],"BIN") )	{	  mode = CIMRepository::MODE_BIN;	  modeother = CIMRepository::MODE_XML;	  mixed_mode = 0;	  if (verbose) cout << ProgName<< ": Single test using BIN mode repository" << endl;	}      else if (!strcmp(argv[1],"XMLMIX") )	{	  mode = CIMRepository::MODE_XML;	  modeother = CIMRepository::MODE_BIN;	  mixed_mode = 1;	  if (verbose) cout << ProgName<< ": Mixed test using XML mode repository first" << endl;	}      else if (!strcmp(argv[1],"BINMIX") )	{	  mode = CIMRepository::MODE_BIN;	  modeother = CIMRepository::MODE_XML;	  mixed_mode = 1;	  if (verbose) cout << ProgName<< ": Mixed test using BIN mode repository first" << endl;	}      else	{	  cout << ProgName<< ": invalid argument: " << argv[1] << endl;	  return 0;	}      TestOpenRepo(mode);      TestInitRepo();      TestCreateClass();      TestEnumerateClass();      TestCreateInstance1();      if (mixed_mode) 	{	  TestCloseRepo();	  TestOpenRepo(modeother);	}      TestCreateInstance2();      if (mixed_mode) 	{	  TestCloseRepo();	  TestOpenRepo(mode);	}      TestCreateInstance3();      if (mixed_mode) 	{	  TestCloseRepo();	  TestOpenRepo(modeother);	}      TestCreateInstance4();      if (mixed_mode) 	{	  TestCloseRepo();	  TestOpenRepo(mode);	}      TestCreateInstance5();      TestEnumerateInstance(5);      TestEnumerateInstances(5);            TestEnumerateInstancesForClass(5);            TestQualifiers();    }    catch (const Exception& e)    {	cout << argv[0] << " " << argv[1] << " " << e.getMessage() << endl;	exit(1);    }    cout << ProgName << " " << argv[1] << " +++++ passed all tests" << endl;    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -