11
#define _ClassName "TestCMPI_Method"
12
#define _ClassName_size strlen(_ClassName)
13
#define _Namespace "root/cimv2"
14
#define _PersonClass "CMPI_TEST_Person"
15
# define CMObjectPathToString(p,rc) \
16
((p)->ft->toString((p),(rc)))
17
# define CMGetMessage(b,id,def,rc,parms) \
18
((b)->eft->getMessage((b),(id),(def),(rc),parms))
20
static const CMPIBroker *_broker;
23
# define UINT64_LITERAL(X) ((CMPIUint64)X##ULL)
25
# define UINT64_LITERAL(X) ((CMPIUint64)X)
28
/* ---------------------------------------------------------------------------*/
29
/* CMPI Helper function */
30
/* ---------------------------------------------------------------------------*/
34
CMPIObjectPath * make_ObjectPath (
35
const CMPIBroker *broker,
37
const char *className)
39
CMPIObjectPath *objPath = NULL;
40
CMPIStatus rc = { CMPI_RC_OK, NULL };
41
objPath = CMNewObjectPath (broker, ns, className, &rc);
42
CMAddKey (objPath, "ElementName", (CMPIValue *) className, CMPI_chars);
46
CMPIInstance * make_Instance (const CMPIObjectPath * op)
48
CMPIStatus rc = { CMPI_RC_OK, NULL };
49
CMPIInstance *ci = NULL;
50
ci = CMNewInstance (_broker, op, &rc);
51
if (rc.rc == CMPI_RC_ERR_NOT_FOUND)
59
_CMGetMessage (char **result)
62
CMPIString *str = NULL;
63
CMPIStatus rc = { CMPI_RC_OK, NULL };
65
CMGetMessage (_broker, "Common.CIMStatusCode.CIM_ERR_SUCCESS",
66
"CIM_ERR_SUCCESS: Successful.", &rc, 0);
69
*result = strdup (CMGetCharsPtr (str,NULL));
71
if (rc.rc == CMPI_RC_OK)
77
_CMLogMessage (char **result)
79
CMPIStatus rc = { CMPI_RC_OK, NULL };
81
rc = CMLogMessage (_broker, 64, _ClassName, "Log message", NULL);
82
if (rc.rc == CMPI_RC_ERR_NOT_SUPPORTED) {
83
*result=strdup("LogMessage success");
90
_CMTraceMessage (char **result)
92
CMPIStatus rc = { CMPI_RC_OK, NULL };
94
rc = CMTraceMessage (_broker, 2, NULL, NULL, NULL);
95
if (rc.rc == CMPI_RC_ERR_NOT_SUPPORTED){
96
*result=strdup("TraceMessage success");
102
static int _testArrayTypes()
106
CMPIType element_type;
116
"CMPI_uint32_array"},
122
"CMPI_uint16_array"},
134
"CMPI_uint64_array"},
140
"CMPI_sint32_array"},
146
"CMPI_sint16_array"},
158
"CMPI_sint64_array"},
164
"CMPI_real32_array"},
170
"CMPI_real64_array"},
176
"CMPI_char16_array"},
182
"CMPI_boolean_array"},
188
"CMPI_string_array"},
194
"CMPI_dateTime_array"},
206
"CMPI_instance_array"},
214
CMPIStatus rc = { CMPI_RC_OK, NULL };
215
CMPIStatus rc1 = { CMPI_RC_OK, NULL };
216
CMPIArray *arr = NULL;
217
CMPIString* retNamespace = NULL;
218
CMPIString* retClassname = NULL;
219
CMPIValue value, value1;
223
CMPIData retDataInst;
224
CMPIArgs* args_ptr = NULL;
225
CMPIObjectPath* objPath = make_ObjectPath(_broker,
228
CMPIUint64 datetime1, datetime2;
233
for ( i = 0 ; i < size; i++)
235
args_ptr = CMNewArgs(_broker, &rc);
236
switch(types_arr[i].element_type)
271
value.real32 = (CMPIReal32)-32.78;
275
value.real64 = -899.32;
283
value.string = CMNewString(_broker, "string", &rc);
291
value.dateTime = CMNewDateTime(_broker, &rc);
295
value.ref = CMNewObjectPath (_broker,
306
value.inst = make_Instance(objPath);
308
rc = CMSetProperty(value.inst,
316
rc = CMAddArg (args_ptr,
320
arr = CMNewArray (_broker, 1, types_arr[i].element_type, &rc);
322
rc = CMSetArrayElementAt(arr, 0, &value, types_arr[i].element_type);
324
rc = CMAddArg (args_ptr,
325
types_arr[i].args_name,
330
if((types_arr[i].element_type) != CMPI_null)
332
data = CMGetArg(args_ptr, types_arr[i].args_name , &rc);
334
arr_data = CMGetArrayElementAt(data.value.array, 0, &rc);
336
switch(types_arr[i].element_type)
339
if (arr_data.value.uint32 != value.uint32)
346
if (arr_data.value.uint16 != value.uint16)
353
if (arr_data.value.uint8 != value.uint8)
360
if (arr_data.value.uint64 != value.uint64)
367
if (arr_data.value.sint32 != value.sint32)
374
if (arr_data.value.sint16 != value.sint16)
381
if (arr_data.value.sint8 != value.sint8)
388
if (arr_data.value.sint64 != value.sint64)
395
if (arr_data.value.real32 != value.real32)
402
if (arr_data.value.real64 != value.real64)
409
if (arr_data.value.char16 != value.char16)
416
str1 = CMGetCharsPtr(arr_data.value.string, &rc);
417
str2 = CMGetCharsPtr(value.string, &rc1);
418
if ((rc.rc != CMPI_RC_OK) ||
419
(rc1.rc != CMPI_RC_OK) ||
427
if (arr_data.value.boolean != value.boolean)
434
datetime1 = CMGetBinaryFormat(arr_data.value.dateTime,
436
datetime2 = CMGetBinaryFormat(value.dateTime, &rc1);
437
if ((rc.rc != CMPI_RC_OK) ||
438
(rc1.rc != CMPI_RC_OK) ||
439
(datetime1 != datetime2))
443
rc = CMRelease(value.dateTime);
447
retNamespace = CMGetNameSpace(arr_data.value.ref, &rc);
448
retClassname = CMGetClassName(arr_data.value.ref, &rc1);
449
if((rc.rc == CMPI_RC_OK) &&
450
(rc1.rc == CMPI_RC_OK))
452
str1 = CMGetCharsPtr(retNamespace, &rc);
453
str2 = CMGetCharsPtr(retClassname, &rc1);
454
if ((rc.rc == CMPI_RC_OK) &&
455
(rc1.rc == CMPI_RC_OK))
457
if ((strcmp(str1, "root/cimv2")) ||
458
(strcmp(str2, "TestCMPI_Instance")))
472
rc = CMRelease(value.ref);
476
retDataInst = CMGetProperty(arr_data.value.inst,
478
dataInst = CMGetProperty(value.inst, "Property1", &rc);
479
if (retDataInst.value.uint32 != dataInst.value.uint32)
483
rc = CMRelease(value.inst);
486
if (data.type == types_arr[i].typeA && flag)
491
rc = CMRelease(args_ptr);
496
static int _testSimpleTypes()
498
CMPIArgs* args_ptr = NULL;
499
CMPIStatus rc = { CMPI_RC_OK, NULL };
500
CMPIStatus rc1 = { CMPI_RC_OK, NULL };
506
CMPIData retDataInst;
507
CMPIString* retNamespace = NULL;
508
CMPIString* retClassname = NULL;
509
CMPIObjectPath* objPath = make_ObjectPath(_broker,
517
CMPIType element_type;
532
for ( i = 0 ; i < size; i++)
534
args_ptr = CMNewArgs(_broker, &rc);
536
switch(types_arr[i].element_type)
539
value.ref = CMNewObjectPath (_broker,
546
value.inst = make_Instance(objPath);
548
rc = CMSetProperty(value.inst,
554
rc = CMAddArg (args_ptr,
555
types_arr[i].args_name,
556
(CMPIValue *) &value,
557
types_arr[i].element_type);
559
data = CMGetArg(args_ptr, types_arr[i].args_name , &rc);
561
switch(types_arr[i].element_type)
564
retNamespace = CMGetNameSpace(data.value.ref, &rc);
565
retClassname = CMGetClassName(data.value.ref, &rc1);
567
if((rc.rc == CMPI_RC_OK) &&
568
(rc1.rc == CMPI_RC_OK))
570
str1 = CMGetCharsPtr(retNamespace, &rc);
571
str2 = CMGetCharsPtr(retClassname, &rc1);
572
if ((rc.rc == CMPI_RC_OK) &&
573
(rc1.rc == CMPI_RC_OK))
575
if ((strcmp(str1, "root/cimv2")) ||
576
(strcmp(str2, "Sample_Instance")))
590
rc = CMRelease(value.ref);
594
retDataInst = CMGetProperty(data.value.inst,
596
dataInst = CMGetProperty(value.inst, "Property1", &rc);
597
if (retDataInst.value.uint32 != dataInst.value.uint32)
601
rc = CMRelease(value.inst);
604
if (data.type == types_arr[i].element_type && flag)
607
rc = CMRelease(args_ptr);
612
static int _testErrorPaths()
614
CMPIArgs* args_ptr = NULL;
615
CMPIStatus rc = { CMPI_RC_OK, NULL };
619
args_ptr = CMNewArgs(_broker, &rc);
620
rc = CMAddArg (args_ptr,
622
(CMPIValue *) &value,
625
rc = CMAddArg (args_ptr,
627
(CMPIValue *) &value,
629
value.dateTime = NULL;
630
rc = CMAddArg (args_ptr,
632
(CMPIValue *) &value,
634
rc = CMAddArg (args_ptr,
638
rc = CMAddArg (args_ptr,
644
rc = CMAddArg (args_ptr,
650
rc = CMAddArg (args_ptr,
652
(CMPIValue *) &value,
655
rc = CMRelease(args_ptr);
660
static int _testCMPIEnumeration (const CMPIContext* ctx)
662
CMPIStatus rc = { CMPI_RC_OK, NULL };
663
CMPIEnumeration *enum_ptr = NULL;
665
unsigned int initCount = 0;
666
CMPIObjectPath* objPath = NULL;
667
CMPIArray* arr_ptr = NULL;
668
CMPICount returnedArraySize;
670
objPath = make_ObjectPath(_broker, _Namespace, _PersonClass);
671
enum_ptr = CBEnumInstances(_broker, ctx, objPath, NULL, &rc);
672
if (enum_ptr == NULL)
677
arr_ptr = CMToArray(enum_ptr, &rc);
683
returnedArraySize = CMGetArrayCount(arr_ptr, &rc);
684
while (CMHasNext(enum_ptr, &rc))
686
data = CMGetNext(enum_ptr, &rc);
687
if (data.type != CMPI_instance)
694
eptr = enum_ptr->hdl;
695
enum_ptr->hdl = NULL;
697
CMToArray(enum_ptr, &rc);
698
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
703
CMGetNext(enum_ptr, &rc);
704
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
709
CMHasNext(enum_ptr, &rc);
710
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
714
enum_ptr->hdl = eptr;
715
rc = CMRelease (enum_ptr);
716
if (rc.rc != CMPI_RC_OK)
724
static int _testCMPIArray ()
726
CMPIStatus rc = { CMPI_RC_OK, NULL };
727
CMPIArray *arr_ptr = NULL;
728
CMPIArray *new_arr_ptr = NULL;
730
CMPIData clonedData[3];
732
CMPIType initArrayType = CMPI_uint32;
733
CMPIType initErrArrayType = CMPI_REAL;
734
CMPIType returnedArrayType;
735
CMPICount initArraySize = 3;
736
CMPICount returnedArraySize;
738
CMPIBoolean cloneSuccessful = 0;
739
CMPIBoolean getDataSuccessful;
741
arr_ptr = CMNewArray(_broker, initArraySize, initArrayType, &rc);
746
returnedArraySize = CMGetArrayCount(arr_ptr, &rc);
747
returnedArrayType = CMGetArrayType(arr_ptr, &rc);
750
rc = CMSetArrayElementAt(arr_ptr, 0, &value, initArrayType);
752
rc = CMSetArrayElementAt(arr_ptr, 1, &value, initArrayType);
754
rc = CMSetArrayElementAt(arr_ptr, 2, &value, initArrayType);
759
data[i] = CMGetArrayElementAt(arr_ptr, i, &rc);
764
getDataSuccessful = 1;
767
if (data[i].value.uint32 != (i + 1) * 10)
769
getDataSuccessful = 0;
774
new_arr_ptr = arr_ptr->ft->clone(arr_ptr, &rc);
778
clonedData[i] = CMGetArrayElementAt(new_arr_ptr, i, &rc);
783
for (i = 0; i < initArraySize; i++)
785
if (data[i].value.uint32 != clonedData[i].value.uint32)
791
rc = new_arr_ptr->ft->release(new_arr_ptr);
795
returnedArraySize = CMGetArrayCount(arr_ptr, &rc);
796
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
801
returnedArrayType = CMGetArrayType(arr_ptr, &rc);
802
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
807
rc = CMSetArrayElementAt(arr_ptr, 2, &value, initArrayType);
808
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
813
CMGetArrayElementAt(arr_ptr, 5, &rc);
814
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
818
arr_ptr->ft->clone(arr_ptr, &rc);
819
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
824
rc = arr_ptr->ft->release(arr_ptr);
825
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
832
CMGetArrayElementAt(arr_ptr, 5, &rc);
833
if (rc.rc != CMPI_RC_ERR_NO_SUCH_PROPERTY)
838
rc = CMSetArrayElementAt(arr_ptr, 2, &value, initErrArrayType);
839
if (rc.rc != CMPI_RC_ERR_TYPE_MISMATCH)
844
rc = arr_ptr->ft->release(arr_ptr);
848
static int _testCMPIcontext (const CMPIContext* ctx)
850
CMPIStatus rc = { CMPI_RC_OK, NULL };
853
CMPIUint32 count = 0;
854
CMPIUint32 count_for_new_context = 0;
855
count = CMGetContextEntryCount(ctx, &rc);
857
rc = CMAddContextEntry(ctx, "name1", &value, CMPI_uint32);
858
value.real32 = (CMPIReal32)40.123;
859
rc = CMAddContextEntry(ctx, "name2", &value, CMPI_real32);
860
data = CMGetContextEntry(ctx, "name1", &rc);
861
data = CMGetContextEntry(ctx, "name2", &rc);
862
count_for_new_context = CMGetContextEntryCount(ctx, &rc);
863
CMGetContextEntry(ctx, "noEntry", &rc);
864
if (rc.rc != CMPI_RC_ERR_NO_SUCH_PROPERTY)
872
static int _testCMPIDateTime ()
874
CMPIStatus rc = { CMPI_RC_OK, NULL };
876
CMPIBoolean isInterval = 0;
877
CMPIBoolean interval = 0;
878
CMPIBoolean cloneSuccessful = 0;
879
CMPIBoolean binaryDateTimeEqual = 0;
881
CMPIDateTime *dateTime = NULL;
882
CMPIDateTime *new_dateTime = NULL;
883
CMPIDateTime *clonedDateTime = NULL;
884
CMPIDateTime *dateTimeFromBinary = NULL;
886
CMPIUint64 dateTimeInBinary = UINT64_LITERAL(1150892800000000);
887
CMPIUint64 returnedDateTimeInBinary = 0;
889
CMPIString* stringDate = NULL;
890
CMPIString* clonedStringDate = NULL;
892
const char *normalString = NULL;
893
const char *clonedString = NULL;
896
dateTime = CMNewDateTime(_broker, &rc);
897
if (dateTime == NULL)
902
dateTimeFromBinary = CMNewDateTimeFromBinary(
903
_broker, dateTimeInBinary, interval, &rc);
904
returnedDateTimeInBinary = CMGetBinaryFormat(dateTimeFromBinary, &rc);
905
if (dateTimeInBinary == returnedDateTimeInBinary)
907
binaryDateTimeEqual = 1;
909
isInterval = CMIsInterval(dateTime, &rc);
911
new_dateTime = CMNewDateTimeFromBinary(
912
_broker, dateTimeInBinary, interval,&rc);
913
isInterval = CMIsInterval(new_dateTime, &rc);
914
clonedDateTime = dateTime->ft->clone(dateTime, &rc);
915
stringDate = CMGetStringFormat(dateTime, &rc);
916
clonedStringDate = CMGetStringFormat(clonedDateTime, &rc);
917
rc = clonedDateTime->ft->release(clonedDateTime);
918
normalString = CMGetCharsPtr(stringDate, &rc);
919
clonedString = CMGetCharsPtr(clonedStringDate, &rc);
920
if (strcmp(normalString,clonedString) == 0)
924
dtptr = dateTime->hdl;
925
dateTime->hdl = NULL;
927
CMGetBinaryFormat(dateTime, &rc);
928
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
933
dateTime->ft->clone(dateTime, &rc);
934
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
939
CMGetStringFormat(dateTime, &rc);
940
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
945
rc = dateTime->ft->release(dateTime);
946
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
951
dateTime->hdl = dtptr;
952
rc = dateTime->ft->release(dateTime);
956
static int _testCMPIInstance ()
958
CMPIStatus rc = { CMPI_RC_OK, NULL };
960
CMPIInstance* instance = NULL;
961
CMPIInstance* clonedInstance = NULL;
962
CMPIObjectPath* objPath = NULL;
963
CMPIObjectPath* newObjPath = NULL;
964
CMPIObjectPath* returnedObjPath = NULL;
966
CMPIData returnedData1;
967
CMPIData returnedData2;
968
CMPIData clonedData1;
970
CMPIString* returnedName = NULL;
971
unsigned int count = 0;
972
const char* name1 = "firstPropertyName";
974
const char* name2 = "secondPropertyName";
976
CMPIType type = CMPI_uint64;
977
CMPIBoolean dataEqual = 0;
978
CMPIBoolean objectPathEqual = 0;
979
CMPIBoolean cloneSuccessful = 0;
980
CMPIString* beforeObjPath = NULL;
981
CMPIString* afterObjPath = NULL;
982
const char* beforeString = NULL;
983
const char* afterString = NULL;
984
objPath = make_ObjectPath(_broker, _Namespace, _ClassName);
985
instance = make_Instance(objPath);
987
rc = CMSetProperty(instance, name1, &value1, type);
989
rc = CMSetProperty(instance, name2, &value2, type);
990
count = CMGetPropertyCount(instance, &rc);
991
returnedData1 = CMGetProperty(instance, name1, &rc);
992
if (returnedData1.value.uint32 == 10)
996
returnedData2 = CMGetPropertyAt(instance, 2, &returnedName, &rc);
997
if (returnedData2.value.uint32 == 20)
1001
newObjPath = make_ObjectPath(_broker, _Namespace, _ClassName);
1002
returnedObjPath = CMGetObjectPath(instance, &rc);
1003
beforeObjPath = CMObjectPathToString(returnedObjPath, &rc);
1004
beforeString = CMGetCharsPtr(beforeObjPath, &rc);
1005
rc = CMSetNameSpace(newObjPath, "newNamespace");
1006
rc = CMSetObjectPath(instance, newObjPath);
1007
returnedObjPath = CMGetObjectPath(instance, &rc);
1008
afterObjPath = CMObjectPathToString(returnedObjPath, &rc);
1009
afterString = CMGetCharsPtr(afterObjPath,&rc);
1010
afterString = CMGetCharsPtr(CMGetNameSpace(returnedObjPath, &rc), &rc);
1011
if (strcmp("newNamespace",afterString) == 0)
1013
objectPathEqual = 1;
1015
clonedInstance = instance->ft->clone(instance, &rc);
1016
clonedData1 = CMGetProperty(clonedInstance, name1, &rc);
1017
rc = clonedInstance->ft->release(clonedInstance);
1018
if (returnedData1.value.uint32 == clonedData1.value.uint32)
1020
cloneSuccessful = 1;
1024
cloneSuccessful = 0;
1026
CMGetProperty(instance, "noProperty", &rc);
1027
if (rc.rc != CMPI_RC_ERR_NO_SUCH_PROPERTY)
1032
CMGetPropertyAt(instance, 100, &returnedName, &rc);
1033
if (rc.rc != CMPI_RC_ERR_NO_SUCH_PROPERTY)
1037
rc = instance->ft->release(instance);
1041
static int _testCMPIObjectPath ()
1043
CMPIStatus rc = { CMPI_RC_OK, NULL };
1045
CMPIObjectPath* objPath = NULL;
1046
CMPIObjectPath* clonedObjPath = NULL;
1047
CMPIObjectPath* otherObjPath = NULL;
1048
CMPIObjectPath *fakeObjPath = NULL;
1050
const char* hostName = "HOSTNAME";
1051
const char* nameSpace = "root/dummy";
1052
const char* className = "classname";
1054
CMPIString* returnedHostname = NULL;
1055
CMPIBoolean equalHostname = 0;
1056
CMPIString* returnedNamespace = NULL;
1057
CMPIBoolean equalNamespace = 0;
1058
CMPIString* returnedClassName;
1059
CMPIBoolean equalClassName = 0;
1060
CMPIString* returnedObjectPath;
1061
CMPIBoolean cloneSuccessful = 0;
1062
CMPIBoolean getKeySuccessful = 0;
1063
CMPIBoolean getKeyCountSuccessful = 0;
1064
CMPIBoolean getKeyAtSuccessful = 0;
1065
const char* objectPath1 = NULL;
1066
const char* objectPath2 = NULL;
1069
unsigned int keyCount = 0;
1070
objPath = make_ObjectPath(_broker, _Namespace, _ClassName);
1071
rc = CMSetHostname(objPath, hostName);
1072
returnedHostname = CMGetHostname(objPath, &rc);
1073
if (strcmp(hostName,CMGetCharsPtr(returnedHostname,&rc)) == 0)
1077
rc = CMSetNameSpace(objPath, nameSpace);
1078
returnedNamespace = CMGetNameSpace(objPath, &rc);
1079
if (strcmp(nameSpace, CMGetCharsPtr(returnedNamespace, &rc)) == 0)
1083
rc = CMSetClassName(objPath, className);
1084
returnedClassName = CMGetClassName(objPath, &rc);
1085
if (strcmp(className,CMGetCharsPtr(returnedClassName, &rc)) == 0)
1089
otherObjPath = make_ObjectPath(_broker, _Namespace, _ClassName);
1090
returnedNamespace = CMGetNameSpace(otherObjPath, &rc);
1091
rc = CMSetNameSpaceFromObjectPath(otherObjPath, objPath);
1092
returnedNamespace = CMGetNameSpace(otherObjPath, &rc);
1093
if (strcmp(nameSpace,CMGetCharsPtr(returnedNamespace, &rc)) == 0)
1097
returnedHostname = CMGetHostname(otherObjPath, &rc);
1098
rc = CMSetHostAndNameSpaceFromObjectPath(otherObjPath,objPath);
1099
returnedHostname = CMGetHostname(otherObjPath, &rc);
1100
if (strcmp(hostName,CMGetCharsPtr(returnedHostname,&rc)) == 0)
1104
returnedObjectPath = CMObjectPathToString(objPath, &rc);
1105
objectPath1 = CMGetCharsPtr(returnedObjectPath, &rc);
1106
clonedObjPath = objPath->ft->clone(objPath, &rc);
1107
returnedObjectPath = CMObjectPathToString(clonedObjPath, &rc);
1108
rc = clonedObjPath->ft->release(clonedObjPath);
1109
objectPath2 = CMGetCharsPtr(returnedObjectPath, &rc);
1110
if (strcmp(objectPath1,objectPath2) == 0)
1112
cloneSuccessful = 1;
1116
cloneSuccessful = 0;
1118
fakeObjPath = CMNewObjectPath (_broker, "root#cimv2",
1119
"Sample_Instance", &rc);
1120
rc = CMAddKey (fakeObjPath, "ElementName",
1121
(CMPIValue *) "Fake", CMPI_chars);
1122
rc = CMAddKey (otherObjPath, "ElementName1",
1123
(CMPIValue *) "otherObjPath", CMPI_chars);
1124
data = CMGetKey(fakeObjPath, "ElementName", &rc);
1125
if (strcmp(CMGetCharsPtr(data.value.string, &rc),"Fake") == 0)
1127
getKeySuccessful = 1;
1129
keyCount = CMGetKeyCount(fakeObjPath, &rc);
1132
getKeyCountSuccessful = 1;
1134
data = CMGetKeyAt(fakeObjPath, 0, NULL, &rc);
1137
getKeyAtSuccessful = 1;
1140
rc = CMAddKey (fakeObjPath, "Numeric_key_unsigned",
1141
(CMPIValue *) &value, CMPI_uint16);
1142
data = CMGetKey(fakeObjPath, "Numeric_key_unsigned", &rc);
1144
rc = CMAddKey (fakeObjPath, "Numeric_key_signed",
1145
(CMPIValue *) &value, CMPI_sint16);
1146
data = CMGetKey(fakeObjPath, "Numeric_key_signed", &rc);
1148
rc = CMAddKey (fakeObjPath, "Boolean_key",
1149
(CMPIValue *) &value, CMPI_boolean);
1150
data = CMGetKey(fakeObjPath, "Boolean_key", &rc);
1151
CMGetKeyAt(objPath, 500, NULL, &rc);
1152
if (rc.rc != CMPI_RC_ERR_NO_SUCH_PROPERTY)
1156
rc = objPath->ft->release(objPath);
1157
rc = fakeObjPath->ft->release(fakeObjPath);
1161
static int _testCMPIResult (const CMPIResult *rslt)
1163
CMPIStatus rc = { CMPI_RC_OK, NULL };
1167
const CMPIObjectPath* objPath = NULL;
1168
CMPIBoolean returnDataSuccessful = 0;
1171
rc = CMReturnData(rslt, &value, type);
1172
if (rc.rc == CMPI_RC_OK)
1174
returnDataSuccessful = 1;
1176
objPath = make_ObjectPath(_broker, _Namespace, _ClassName);
1177
rc = CMReturnObjectPath(rslt, objPath);
1178
rc = CMReturnDone(rslt);
1179
rc = CMReturnData(rslt, NULL, type);
1180
if (rc.rc != CMPI_RC_ERR_INVALID_PARAMETER)
1188
static int _testCMPIString()
1190
CMPIStatus rc = { CMPI_RC_OK, NULL };
1192
CMPIString* string = NULL;
1193
CMPIString* clonedString = NULL;
1194
const char* actual_string = NULL;
1195
const char* cloned_string = NULL;
1196
const char *data = "dataString";
1197
CMPIBoolean cloneSuccessful = 0;
1199
string = CMNewString(_broker, data, &rc);
1200
actual_string = CMGetCharsPtr(string, &rc);
1201
clonedString = string->ft->clone(string, &rc);
1202
cloned_string = CMGetCharsPtr(clonedString, &rc);
1203
if (strcmp(actual_string,cloned_string) == 0)
1205
cloneSuccessful = 1;
1207
rc = clonedString->ft->release(clonedString);
1208
string_ptr = string->hdl;
1211
string->ft->clone(string, &rc);
1212
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
1217
rc = string->ft->release(string);
1218
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
1223
CMGetCharsPtr(string, &rc);
1224
if (rc.rc != CMPI_RC_ERR_INVALID_HANDLE)
1229
string->hdl = string_ptr;
1230
rc = string->ft->release(string);
1234
static int _testCMPIArgs()
1236
CMPIStatus rc = { CMPI_RC_OK, NULL };
1238
CMPIArgs* args = NULL;
1239
CMPIArgs* clonedArgs = NULL;
1240
CMPIUint32 count = 0;
1241
CMPIType type = CMPI_uint32;
1242
char *arg1 = "arg1";
1243
char *arg2 = "arg2";
1246
CMPIData clonedData;
1247
CMPIBoolean cloneSuccessful = 0;
1248
CMPIBoolean getArgCountSuccessful = 0;
1249
args = CMNewArgs(_broker, &rc);
1251
rc = CMAddArg(args, arg1, &value, type);
1252
count = CMGetArgCount(args, &rc);
1255
getArgCountSuccessful = 1;
1258
rc = CMAddArg(args, arg2, &value, type);
1259
count = CMGetArgCount(args, &rc);
1262
getArgCountSuccessful = 1;
1264
data = CMGetArg(args, arg2, &rc);
1265
rc = CMAddArg(args, arg1, &value, type);
1266
clonedArgs = args->ft->clone(args, &rc);
1267
clonedData = CMGetArg(clonedArgs, arg2, &rc);
1268
rc = clonedArgs->ft->release(clonedArgs);
1269
if (data.value.uint32 == clonedData.value.uint32)
1271
cloneSuccessful = 1;
1273
rc = args->ft->release(args);
1277
/* ---------------------------------------------------------------------------*/
1278
/* Method Provider Interface */
1279
/* ---------------------------------------------------------------------------*/
1281
TestMiscProviderMethodCleanup (CMPIMethodMI * mi, const CMPIContext * ctx, CMPIBoolean terminate)
1283
CMReturn(CMPI_RC_OK);
1287
TestMiscProviderInvokeMethod (CMPIMethodMI * mi,
1288
const CMPIContext * ctx,
1289
const CMPIResult * rslt,
1290
const CMPIObjectPath * ref,
1291
const char *methodName,
1292
const CMPIArgs * in, CMPIArgs * out)
1294
CMPIString *class = NULL;
1295
CMPIStatus rc = { CMPI_RC_OK, NULL };
1298
char *result = NULL;
1300
if (strncmp ("testReturn", methodName, strlen ("testReturn")) == 0)
1303
CMReturnData (rslt, &value, CMPI_uint32);
1304
CMReturnDone (rslt);
1308
class = CMGetClassName (ref, &rc);
1310
CMGetCharsPtr (class,NULL),
1312
strlen (_ClassName)) == 0)
1314
if (strncmp ("TestCMPIBroker", methodName, strlen ("TestCMPIBroker")) ==
1317
// Parse the CMPIArgs in to figure out which operation it is.
1318
// There are six of them:
1319
// ValueMap { "1", "2", "3"},
1320
// Values {"CMGetMessage","CMLogMessage","CDTraceMessage"}]
1321
// uint32 Operation,
1322
// [OUT]string Result);
1323
data = CMGetArg (in, "Operation", &rc);
1325
if (data.type == CMPI_uint32)
1327
switch (data.value.uint32)
1330
value.uint32 = _CMGetMessage (&result);
1333
value.uint32 = _CMLogMessage (&result);
1336
value.uint32 = _CMTraceMessage (&result);
1339
value.uint32 = _testCMPIEnumeration (ctx);
1340
result=strdup("_testCMPIEnumeration ");
1343
value.uint32 = _testCMPIArray ();
1344
result=strdup("_testCMPIArray ");
1347
value.uint32 = _testCMPIcontext (ctx);
1348
result=strdup("_testCMPIContext ");
1351
value.uint32 = _testCMPIDateTime ();
1352
result=strdup("_testCMPIDateTime ");
1355
value.uint32 = _testCMPIInstance ();
1356
result=strdup("_testCMPIInstance ");
1359
value.uint32 = _testCMPIObjectPath ();
1360
result=strdup("_testCMPIObjectPath ");
1363
value.uint32 = _testCMPIResult (rslt);
1364
result=strdup("_testCMPIResult ");
1367
value.uint32 = _testCMPIString ();
1368
result=strdup("_testCMPIString ");
1371
value.uint32 = _testCMPIArgs ();
1372
result=strdup("_testCMPIArgs ");
1377
CMReturnData (rslt, &value, CMPI_uint32);
1378
CMReturnDone (rslt);
1379
rc = CMAddArg (out, "Result", (CMPIValue *) result, CMPI_chars);
1385
CMReturnData (rslt, &value, CMPI_uint32);
1386
CMReturnDone (rslt);
1390
else if (strncmp ("returnString", methodName, strlen ("returnString"))
1393
result = strdup ("Returning string");
1394
CMReturnData (rslt, (CMPIValue *) result, CMPI_chars);
1395
CMReturnDone (rslt);
1398
else if (strncmp ("returnUint32", methodName, strlen ("returnUint32"))
1403
CMReturnData (rslt, &value, CMPI_uint32);
1404
CMReturnDone (rslt);
1407
strncmp("returnDateTime", methodName, strlen("returnDateTime")) == 0)
1409
CMPIUint64 ret_val = 0;
1410
CMPIStatus dateTimeRc={CMPI_RC_OK, NULL};
1412
CMPIDateTime *dateTime = CMNewDateTime(_broker, &dateTimeRc);
1413
// Checking the date.
1414
ret_val = CMGetBinaryFormat (dateTime, &dateTimeRc);
1415
if (ret_val == 0) {}
1417
CMReturnData (rslt, (CMPIValue *) & dateTime, CMPI_dateTime);
1418
CMReturnDone (rslt);
1421
strncmp("testArrayTypes", methodName, strlen ("testArrayTypes"))== 0)
1423
value.uint32 = _testArrayTypes();
1424
CMReturnData (rslt, &value, CMPI_uint32);
1425
CMReturnDone (rslt);
1428
strncmp("testErrorPaths", methodName, strlen ("testErrorPaths")) == 0)
1430
value.uint32 = _testErrorPaths();
1431
CMReturnData (rslt, &value, CMPI_uint32);
1432
CMReturnDone (rslt);
1435
strncmp("testSimpleTypes", methodName, strlen ("testSimpleTypes")) == 0)
1437
value.uint32 = _testSimpleTypes();
1438
CMReturnData (rslt, &value, CMPI_uint32);
1439
CMReturnDone (rslt);
1441
else if (strncmp ("methodNotInMof", methodName, strlen ("methodNotInMof"))
1445
CMReturnData (rslt, &value, CMPI_uint32);
1446
CMReturnDone (rslt);
1450
CMSetStatusWithChars (_broker, &rc,
1451
CMPI_RC_ERR_NOT_FOUND, methodName);
1457
/* ---------------------------------------------------------------------------*/
1458
/* Provider Factory */
1459
/* ---------------------------------------------------------------------------*/
1462
CMMethodMIStub (TestMiscProvider,
1463
TestMiscProvider, _broker, CMNoHook)
1465
/* ---------------------------------------------------------------------------*/
1466
/* end of TestCMPIProvider */
1467
/* ---------------------------------------------------------------------------*/