/** * @author Sumeet Kukreja, Dell Inc. */ #include "wsman_config.h" #include #include #include #include #include #include #include "u/libu.h" #include "wsman-client-api.h" #include "wsman-client-transport.h" #include "wsman-epr.h" #include "wsman-filter.h" //int facility = LOG_DAEMON; int errors = 0; typedef struct { const char *server; int port; const char *path; const char *scheme; const char *username; const char *password; } ServerData; typedef struct { /* Explanation of what you should see */ const char *explanation; /* Namespace containing the class */ const char *namespace; /* Resource UR to test against */ const char *resource_uri; char *filter; const char* xpath_expression; char* expected_value; /* What the final status code should be. */ unsigned int final_status; unsigned int auth_data; } TestData; TestData test = { "Test References.", "root/cimv2", "http://schemas.dmtf.org/wbem/wscim/1/*", "http://sblim.sf.net/wbem/wscim/1/cim-schema/2/Linux_OperatingSystem?Name=\"vamt-build.sh.intel.com\"&CreationClassName=\"Linux_OperatingSystem\"&CSName=\"vamt-build.sh.intel.com\"&CSCreationClassName=\"Linux_ComputerSystem\"", "/s:Envelope/s:Body/s:Fault/s:Code/s:Subcode/s:Value", NULL, 500, 0 }; ServerData sd[] = { {"localhost", 5985, "/wsman", "http", "wsman", "secret"} }; static void wsman_output(WsXmlDocH doc) { ws_xml_dump_node_tree(stdout, ws_xml_get_doc_root(doc)); return; } int main(int argc, char** argv) { WsManClient *cl; WsXmlDocH ref_resp = NULL, doc = NULL; client_opt_t *options; char *enumContext = NULL; cl = wsmc_create(sd[0].server, sd[0].port, sd[0].path, sd[0].scheme, sd[0].username, sd[0].password); wsmc_transport_init(cl, NULL); options = wsmc_options_init(); epr_t *epr = epr_from_string(test.filter); if(test.namespace) epr_add_selector_text(epr, CIM_NAMESPACE_SELECTOR, test.namespace); filter_t *filter = filter_create_assoc(epr, 0, NULL, NULL, NULL, NULL, NULL, 0 ); wsmc_set_action_option(options, FLAG_DUMP_REQUEST); ref_resp = wsmc_action_enumerate(cl, (char *)test.resource_uri, options, filter); if (!ref_resp) { printf("\t\t\033[22;31mUNRESOLVED\033[m\n"); wsmc_options_destroy(options); wsmc_release(cl); return -1; } wsman_output(ref_resp); /* Pull for the response */ enumContext = wsmc_get_enum_context(ref_resp); ws_xml_destroy_doc(ref_resp); while(enumContext != NULL) { doc = wsmc_action_pull(cl, (char *)test.resource_uri, options, NULL, enumContext); if (!doc) { printf("\t\t\033[22;31mUNRESOLVED\033[m\n"); wsmc_options_destroy(options); wsmc_free_enum_context(enumContext); wsmc_release(cl); return -1; } wsman_output(doc); wsmc_free_enum_context(enumContext); enumContext = wsmc_get_enum_context(doc); } if (doc) ws_xml_destroy_doc(doc); wsmc_options_destroy(options); wsmc_release(cl); epr_destroy(epr); filter_destroy(filter); return 0; }