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

📄 property.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: Mike Brasher (mbrasher@bmc.com)//// Modified By: Jenny Yu, Hewlett-Packard Company (jenny_yu@hp.com)//              Carol Ann Krug Graves, Hewlett-Packard Company//                  (carolann_graves@hp.com)//              Karl Schopmeyer(k.schopmeyer@opengroup.org)//              David Dilard, VERITAS Software Corp.//                  (david.dillard@veritas.com)////%/////////////////////////////////////////////////////////////////////////////#include <Pegasus/Common/PegasusAssert.h>#include <Pegasus/Common/CIMProperty.h>#include <Pegasus/Common/CIMPropertyList.h>#include <Pegasus/Common/XmlWriter.h>#include <Pegasus/Common/MofWriter.h>#include <Pegasus/Common/CIMObjectPath.h>PEGASUS_USING_PEGASUS;PEGASUS_USING_STD;static char * verbose;			// controls test IOvoid test01(){    CIMProperty pnull;    PEGASUS_TEST_ASSERT(pnull.isUninitialized());    CIMProperty p1(CIMName ("message"), String("Hi There"));    p1.addQualifier(CIMQualifier(CIMName ("Key"), true));    p1.addQualifier(CIMQualifier(CIMName ("stuff"), true));    p1.addQualifier(CIMQualifier(CIMName ("stuff2"), true));    p1.addQualifier(CIMQualifier(CIMName ("Description"), String("Blah Blah")));    CIMConstProperty p2 = p1;    // Test clone    CIMProperty p1clone = p1.clone();    CIMProperty p2clone = p2.clone();       // Test print    if(verbose)    {	   XmlWriter::printPropertyElement(p1, cout);	   XmlWriter::printPropertyElement(p2, cout);	   XmlWriter::printPropertyElement(p1clone, cout);	   XmlWriter::printPropertyElement(p2clone, cout);    }    // Test toMof       Buffer mofOut;       MofWriter::appendPropertyElement(true, mofOut, p1);       MofWriter::appendPropertyElement(true, mofOut, p2);    // Test toXml       Buffer xmlOut;       XmlWriter::appendPropertyElement(xmlOut, p1);       XmlWriter::appendPropertyElement(xmlOut, p2);    // Test name        CIMName name;        name = p1.getName();        PEGASUS_TEST_ASSERT(name == CIMName ("message"));        name = p2.getName();        PEGASUS_TEST_ASSERT(name == CIMName ("message"));    // Test type        PEGASUS_TEST_ASSERT(p1.getType() == CIMTYPE_STRING);        PEGASUS_TEST_ASSERT(p2.getType() == CIMTYPE_STRING);    // Test for key qualifier        Uint32 pos;        Boolean isKey = false;        if ((pos = p1.findQualifier (CIMName ("key"))) != PEG_NOT_FOUND)        {            CIMValue value;            value = p1.getQualifier (pos).getValue ();            if (!value.isNull ())            {                value.get (isKey);            }        }        PEGASUS_TEST_ASSERT (isKey);        isKey = false;        if ((pos = p2.findQualifier (CIMName ("key"))) != PEG_NOT_FOUND)        {            CIMValue value;            value = p2.getQualifier (pos).getValue ();            if (!value.isNull ())            {                value.get (isKey);            }        }        PEGASUS_TEST_ASSERT (isKey);    // Test getArraySize        PEGASUS_TEST_ASSERT(p1.getArraySize() == 0);        PEGASUS_TEST_ASSERT(p2.getArraySize() == 0);    // Test getPropagated        PEGASUS_TEST_ASSERT(p1.getPropagated() == false);        PEGASUS_TEST_ASSERT(p2.getPropagated() == false);    // Tests for Qualifiers	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff2")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff21")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuf")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.getQualifierCount() == 4);	PEGASUS_TEST_ASSERT(p2.findQualifier(CIMName ("stuff")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p2.findQualifier(CIMName ("stuff2")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p2.findQualifier(CIMName ("stuff21")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p2.findQualifier(CIMName ("stuf")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p2.getQualifierCount() == 4);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff2")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff21")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuf")) == PEG_NOT_FOUND);	Uint32 posQualifier;	posQualifier = p1.findQualifier(CIMName ("stuff"));	PEGASUS_TEST_ASSERT(posQualifier != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(posQualifier < p1.getQualifierCount());	p1.removeQualifier(posQualifier);	PEGASUS_TEST_ASSERT(p1.getQualifierCount() == 3);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(p1.findQualifier(CIMName ("stuff2")) != PEG_NOT_FOUND);    // Tests for value insertion.    {           CIMProperty p1(CIMName ("p1"), String("Hi There"));           // test for CIMValue and type           CIMProperty p2(CIMName ("p2"), Uint32(999));           // test for CIMValue and type	   //Test getName and setName	   PEGASUS_TEST_ASSERT(p1.getName() == CIMName ("p1"));	   p1.setName(CIMName ("px"));	   PEGASUS_TEST_ASSERT(p1.getName() == CIMName ("px"));	   PEGASUS_TEST_ASSERT(p2.getName() == CIMName ("p2"));	   p2.setName(CIMName ("py"));	   PEGASUS_TEST_ASSERT(p2.getName() == CIMName ("py"));	   // Test setValue and getValue    }}void test02(){    // Tests for CIMConstProperty methods        CIMProperty p1(CIMName ("message"), String("Hi There"));        p1.addQualifier(CIMQualifier(CIMName ("Key"), true));        p1.addQualifier(CIMQualifier(CIMName ("stuff"), true));        p1.addQualifier(CIMQualifier(CIMName ("stuff2"), true));        p1.addQualifier(CIMQualifier(CIMName ("Description"), String("Blah Blah")));        CIMConstProperty p2 = p1;        CIMConstProperty cp1 = p1;        CIMConstProperty cp2 = p2;        CIMConstProperty cp3(CIMName ("message3"), String("hello"));        CIMConstProperty cp1clone = cp1.clone();        if(verbose)	    XmlWriter::printPropertyElement(cp1, cout);        Buffer mofOut;        MofWriter::appendPropertyElement(true,mofOut, cp1);        Buffer xmlOut;        XmlWriter::appendPropertyElement(xmlOut, cp1);        PEGASUS_TEST_ASSERT(cp1.getName() == CIMName ("message"));        PEGASUS_TEST_ASSERT(cp1.getType() == CIMTYPE_STRING);        Uint32 pos;        Boolean isKey = false;        if ((pos = cp1.findQualifier (CIMName ("key"))) != PEG_NOT_FOUND)        {            CIMValue value;            value = cp1.getQualifier (pos).getValue ();            if (!value.isNull ())            {                value.get (isKey);            }        }        PEGASUS_TEST_ASSERT (isKey);        PEGASUS_TEST_ASSERT(cp1.getArraySize() == 0);        PEGASUS_TEST_ASSERT(cp1.getPropagated() == false);	PEGASUS_TEST_ASSERT(cp1.findQualifier(CIMName ("stuff")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(cp1.findQualifier(CIMName ("stuff2")) != PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(cp1.findQualifier(CIMName ("stuff21")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(cp1.findQualifier(CIMName ("stuf")) == PEG_NOT_FOUND);	PEGASUS_TEST_ASSERT(cp1.getQualifierCount() == 4);         try         {            p1.getQualifier(0);        }        catch(IndexOutOfBoundsException& e)        {			if(verbose)				cout << "Exception: " << e.getMessage() << endl;	        }}//// Test propertyList class//void test03(){    CIMPropertyList list1;    CIMPropertyList list2;    Array<CIMName> names;    names.append(CIMName ("property1"));    names.append(CIMName ("property2"));    names.append(CIMName ("property3"));    list1.set(names);    list2 = list1;	Array<CIMName> names1a = list1.getPropertyNameArray();	PEGASUS_TEST_ASSERT(names == names1a);	PEGASUS_TEST_ASSERT(list2[0] == CIMName("property1"));	PEGASUS_TEST_ASSERT(list2[1] == CIMName("property2"));	PEGASUS_TEST_ASSERT(list2[2] == CIMName("property3"));    list1.clear();	list2.clear();	// Test use of empty list.  Note that the requirement for	// property lists assumes that we must be able to distinguish	// a NULL property list from an empty property list.  The usages	// are very different.  NULL means ignore.  Empty means use list	// but no properties in list.	Array<CIMName> names2;	list1.set(names2);	PEGASUS_TEST_ASSERT(!list1.isNull());	PEGASUS_TEST_ASSERT(list1.size() == 0);	Array<CIMName> names3 = list1.getPropertyNameArray();	PEGASUS_TEST_ASSERT(names3.size() == 0);}//Test reference type propertiesvoid test04(){    // Create reference type property from string input and reference class name    String p =  "//localhost/root/SampleProvider:TST_PersonDynamic.Name=\"Father\"";    CIMObjectPath path = p;            String referenceClassName = "TST_Person";    CIMProperty p1(CIMName ("message"), path, 0, CIMName(referenceClassName));    PEGASUS_TEST_ASSERT(!p1.isArray());    PEGASUS_TEST_ASSERT(p1.getReferenceClassName() == CIMName(referenceClassName));    PEGASUS_TEST_ASSERT(p1.getType() == CIMTYPE_REFERENCE);        CIMValue v1;    v1 = p1.getValue();    PEGASUS_TEST_ASSERT(v1.getType() ==  CIMTYPE_REFERENCE);    PEGASUS_TEST_ASSERT(!v1.isNull());    CIMObjectPath pathout;    v1.get(pathout);    PEGASUS_TEST_ASSERT( pathout == path );    if(verbose)        XmlWriter::printPropertyElement(p1, cout);    // Now create an empty property, one used in class declaration for a reference    CIMProperty p2(CIMName ("parent"), CIMObjectPath(), 0, CIMName(referenceClassName));    PEGASUS_TEST_ASSERT(!p2.isArray());    PEGASUS_TEST_ASSERT(p2.getReferenceClassName() == CIMName(referenceClassName));    PEGASUS_TEST_ASSERT(p2.getType() == CIMTYPE_REFERENCE);    CIMValue v2;    v2 = p2.getValue();    PEGASUS_TEST_ASSERT(v2.getType() ==  CIMTYPE_REFERENCE);    // ATTN: P3 KS 27 Feb 2003. Why does the following test not work. I assume that the value should    // b e null in this case.    //PEGASUS_TEST_ASSERT(v2.isNull());    CIMObjectPath pathout2;    v1.get(pathout2);    // Now compare the paths        if(verbose)        XmlWriter::printPropertyElement(p2, cout);}//Test reference array type propertiesvoid test05(){    Array<CIMObjectPath> oa;    oa.append(CIMObjectPath("/root/cimv2:My_Class.a=1"));    oa.append(CIMObjectPath("/root/cimv2:My_Class.a=2"));    CIMProperty p1;    Boolean gotException = false;    try    {        p1 = CIMProperty(CIMName("property1"), oa, 0, CIMName("refclass"));    }    catch (TypeMismatchException&)    {        gotException = true;    }    PEGASUS_TEST_ASSERT(gotException);    p1 = CIMProperty(CIMName("property1"), oa[0], 0, CIMName("refclass"));    gotException = false;    try    {        p1.setValue(oa);    }    catch (TypeMismatchException&)    {        gotException = true;    }    PEGASUS_TEST_ASSERT(gotException);}int main(int argc, char** argv){    verbose = getenv("PEGASUS_TEST_VERBOSE");    try    {        test01();        test02();        test03();        test04();        test05();    }    catch (Exception& e)    {        cout << "Exception: " << e.getMessage() << endl;        exit(1);    }    cout << argv[0] << " +++++ passed all tests" << endl;    return 0;}

⌨️ 快捷键说明

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