Added headers
[tpot/pegasus/.git] / src / Pegasus / Client / tests / Client / Client.cpp
1 //%/////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM\r
4 //\r
5 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
6 // of this software and associated documentation files (the "Software"), to \r
7 // deal in the Software without restriction, including without limitation the \r
8 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or \r
9 // sell copies of the Software, and to permit persons to whom the Software is\r
10 // furnished to do so, subject to the following conditions:\r
11 // \r
12 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN \r
13 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED\r
14 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\r
15 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR \r
16 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT \r
17 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN \r
18 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
19 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
20 //\r
21 //==============================================================================\r
22 //\r
23 // Author: Mike Brasher (mbrasher@bmc.com)\r
24 //\r
25 // Modified By:\r
26 //\r
27 //%/////////////////////////////////////////////////////////////////////////////\r
28 \r
29 #include <cassert>\r
30 #include <Pegasus/Common/Selector.h>\r
31 #include <Pegasus/Client/CIMClient.h>\r
32 \r
33 PEGASUS_USING_PEGASUS;\r
34 PEGASUS_USING_STD;\r
35 \r
36 const String NAMESPACE = "root/cimv2";\r
37 \r
38 static void TestGetClass(CIMClient& client)\r
39 {\r
40     CIMClass c = client.getClass(\r
41         NAMESPACE, "CIM_ComputerSystem", false, false, true);\r
42 \r
43     c.print();\r
44 }\r
45 \r
46 static void TestClassOperations(CIMClient& client)\r
47 {\r
48     // CreateClass:\r
49 \r
50     CIMClass c1("SubClass", "CIM_ManagedElement");\r
51     c1.addQualifier(CIMQualifier("abstract", Boolean(true)));\r
52     c1.addProperty(CIMProperty("count", Uint32(99)));\r
53     c1.addProperty(CIMProperty("ratio", Real64(66.66)));\r
54     c1.addProperty(CIMProperty("message", String("Hello World")));\r
55     client.createClass(NAMESPACE, c1);\r
56 \r
57     // GetClass:\r
58 \r
59     CIMClass c2 = client.getClass(NAMESPACE, "SubClass", false);\r
60     // assert(c1.identical(c2));\r
61 \r
62     // Modify the class:\r
63 \r
64     c2.removeProperty(c2.findProperty("message"));\r
65     client.modifyClass(NAMESPACE, c2);\r
66 \r
67     // GetClass:\r
68 \r
69     CIMClass c3 = client.getClass(NAMESPACE, "SubClass", false);\r
70     // assert(c3.identical(c2));\r
71 \r
72     // EnumerateClassNames:\r
73 \r
74     Array<String> classNames = client.enumerateClassNames(\r
75         NAMESPACE, "CIM_ManagedElement", false);\r
76 \r
77     Boolean found = false;\r
78 \r
79     for (Uint32 i = 0; i < classNames.size(); i++)\r
80     {\r
81         if (CIMName::equal(classNames[i], "SubClass"))\r
82             found = true;\r
83     }\r
84 \r
85     assert(found);\r
86 \r
87     // DeleteClass:\r
88 \r
89     client.deleteClass(NAMESPACE, "SubClass");\r
90 \r
91     // Get all the classes;\r
92 \r
93 \r
94     classNames = client.enumerateClassNames(NAMESPACE, String(), false);\r
95 \r
96     Array<CIMClass> classDecls = client.enumerateClasses(\r
97         NAMESPACE, String(), false, false, true, true);\r
98 \r
99     assert(classDecls.size() == classNames.size());\r
100 \r
101     for (Uint32 i = 0; i < classNames.size(); i++)\r
102     {\r
103         CIMClass tmp = client.getClass(\r
104             NAMESPACE, classNames[i], false, true, true);\r
105 \r
106         assert(CIMName::equal(classDecls[i].getClassName(), classNames[i]));\r
107 \r
108         assert(tmp.identical(classDecls[i]));\r
109     }\r
110 }\r
111 \r
112 static void TestQualifierOperations(CIMClient& client)\r
113 {\r
114     // Create two qualifier declarations:\r
115 \r
116     CIMQualifierDecl qd1("qd1", false, CIMScope::CLASS, CIMFlavor::TOSUBCLASS);\r
117     client.setQualifier(NAMESPACE, qd1);\r
118 \r
119     CIMQualifierDecl qd2("qd2", "Hello", CIMScope::PROPERTY | CIMScope::CLASS, \r
120         CIMFlavor::OVERRIDABLE);\r
121     client.setQualifier(NAMESPACE, qd2);\r
122 \r
123     // Get them and compare:\r
124 \r
125     CIMQualifierDecl tmp1 = client.getQualifier(NAMESPACE, "qd1");\r
126     assert(tmp1.identical(qd1));\r
127 \r
128     CIMQualifierDecl tmp2 = client.getQualifier(NAMESPACE, "qd2");\r
129     assert(tmp2.identical(qd2));\r
130 \r
131     // Enumerate the qualifiers:\r
132 \r
133     Array<CIMQualifierDecl> qualifierDecls = client.enumerateQualifiers(NAMESPACE);\r
134 \r
135     for (Uint32 i = 0; i < qualifierDecls.size(); i++)\r
136     {\r
137         CIMQualifierDecl tmp = qualifierDecls[i];\r
138 \r
139         if (CIMName::equal(tmp.getName(), "qd1"))\r
140             assert(tmp1.identical(tmp));\r
141 \r
142         if (CIMName::equal(tmp.getName(), "qd2"))\r
143             assert(tmp2.identical(tmp));\r
144     }\r
145 \r
146     // Delete the qualifiers:\r
147 \r
148     client.deleteQualifier(NAMESPACE, "qd1");\r
149     client.deleteQualifier(NAMESPACE, "qd2");\r
150 }\r
151 \r
152 static void TestInstanceOperations(CIMClient& client)\r
153 {\r
154     // Delete the class if it already exists:\r
155 \r
156     try\r
157     {\r
158         client.deleteClass(NAMESPACE, "myclass");\r
159     }\r
160     catch (Exception&)\r
161     {\r
162         // Ignore delete class!\r
163     }\r
164 \r
165 #if 0\r
166     // Create a new class:\r
167 \r
168     CIMClass cimClass("myclass");\r
169     cimClass\r
170         .addProperty(CIMProperty("last", String())\r
171             .addQualifier(CIMQualifier("key", true)))\r
172         .addProperty(CIMProperty("first", String())\r
173             .addQualifier(CIMQualifier("key", true)))\r
174         .addProperty(CIMProperty("age", Uint8(0))\r
175             .addQualifier(CIMQualifier("key", true)));\r
176     client.createClass(NAMESPACE, cimClass);\r
177 \r
178     // Create an instance of that class:\r
179 \r
180     CIMInstance cimInstance("myclass");\r
181     cimInstance.addProperty(CIMProperty("last", "Smith"));\r
182     cimInstance.addProperty(CIMProperty("first", "John"));\r
183     cimInstance.addProperty(CIMProperty("age", Uint8(101)));\r
184     String instanceName = cimInstance.getInstanceName(cimClass);\r
185     client.createInstance(NAMESPACE, cimInstance);\r
186 \r
187     // Get the instance and compare with created one:\r
188 \r
189     CIMReference ref;\r
190     CIMReference::instanceNameToReference(instanceName, ref);\r
191     CIMInstance tmp = client.getInstance(NAMESPACE, ref);\r
192 \r
193     // cimInstance.print();\r
194     // tmp.print();\r
195     // assert(cimInstance.identical(tmp));\r
196 #endif\r
197 }\r
198 \r
199 int main(int argc, char** argv)\r
200 {\r
201     try\r
202     {\r
203         Selector selector;\r
204         CIMClient client(&selector);\r
205 \r
206         client.connect("localhost:5988");\r
207         // client.connect("216.218.247.109:5988");\r
208         // TestGetClass(client);\r
209         TestQualifierOperations(client);\r
210         TestClassOperations(client);\r
211         TestInstanceOperations(client);\r
212     }\r
213     catch(Exception& e)\r
214     {\r
215         PEGASUS_STD(cerr) << "Error: " << e.getMessage() << PEGASUS_STD(endl);\r
216         exit(1);\r
217     }\r
218 \r
219     PEGASUS_STD(cout) << "+++++ passed all tests" << PEGASUS_STD(endl);\r
220 \r
221     return 0;\r
222 }\r