blob: 108ba098cb9c0de972c52849617c10ad7e796df5 [file] [log] [blame]
#include <stdio.h>
#include "u/libu.h"
#include "wsman-filter.h"
#include "wsman-names.h"
#include "wsman-xml.h"
static void serialize_filter1(void)
{
hash_t *selectors = hash_create(HASHCOUNT_T_MAX, 0, 0);
key_value_t *entry1 = NULL;
entry1 = u_malloc(sizeof(key_value_t)*5);
entry1[0].type = 0;
entry1[0].v.text = "OperatingSystemFilter0";
entry1[1].type = 0;
entry1[1].v.text = "localhost.localdomain";
entry1[2].type = 0;
entry1[2].v.text = "CIM_IndicationFilter";
entry1[3].type = 0;
entry1[3].v.text = "CIM_ComputerSystem";
entry1[4].type = 0;
entry1[4].v.text = "root/interop";
hash_alloc_insert(selectors, "Name", &entry1[0]);
hash_alloc_insert(selectors, "SystemName", &entry1[1]);
hash_alloc_insert(selectors, "CreationClassName", &entry1[2]);
hash_alloc_insert(selectors, "SystemCreationClassName", &entry1[3]);
hash_alloc_insert(selectors, "__cimnamespace", &entry1[4]);
epr_t *epr = epr_create("http://schema.omc-project.org/wbem/wscim/1/cim-schema/2/CIM_IndicationFilter",selectors,NULL);
filter_t *filter = filter_create_assoc(epr, 0, "CIM_IndicationSubscription", NULL, NULL, NULL, NULL, 0);
WsXmlDocH doc = ws_xml_create_envelope();
WsXmlNodeH body = ws_xml_get_soap_body(doc);
WsXmlNodeH node = ws_xml_add_child(body, XML_NS_ENUMERATION, WSENUM_ENUMERATE, NULL);
filter_t *filter_cpy = filter_copy(filter); //test filter_copy
int r = filter_serialize(node, filter_cpy, XML_NS_EVENTING);
if(r) {
printf("\033[22;31mfilter serialize failed!\033[m\n");
return;
}
ws_xml_dump_doc(stdout, doc);
ws_xml_destroy_doc(doc);
hash_free(selectors);
u_free(entry1);
epr_destroy(epr);
filter_destroy(filter);
filter_destroy(filter_cpy);
printf("\033[22;32m\"http://schemas.dmtf.org/wbem/wsman/1/cimbinding/associationFilter\" filter serialize successfully!\033[m\n\n");
}
static void serialize_filter2(void)
{
filter_t *filter = filter_create_simple(WSM_WQL_FILTER_DIALECT, "select * from CIM_ComputerSystem");
WsXmlDocH doc = ws_xml_create_envelope();
WsXmlNodeH body = ws_xml_get_soap_body(doc);
WsXmlNodeH node = ws_xml_add_child(body, XML_NS_ENUMERATION, WSENUM_ENUMERATE, NULL);
filter_t *filter_cpy = filter_copy(filter); //test filter_copy
int r = filter_serialize(node, filter_cpy, XML_NS_WS_MAN);
if(r) {
printf("\t\033[22;31mfilter serialize failed!\033[m\n");
return;
}
ws_xml_dump_doc(stdout, doc);
ws_xml_destroy_doc(doc);
filter_destroy(filter);
filter_destroy(filter_cpy);
printf("\033[22;32m\"http://schemas.microsoft.com/wbem/wsman/1/WQL\" filter serialize successfully!\033[m\n\n");
}
static void serialize_filter3(void)
{
hash_t *selectors = hash_create(HASHCOUNT_T_MAX, 0, 0);
key_value_t *entry1 = NULL;
entry1 = u_malloc(sizeof(key_value_t)*4);
entry1[0].type = 0;
entry1[0].v.text = "OperatingSystemFilter0";
entry1[1].type = 0;
entry1[1].v.text = "localhost.localdomain";
entry1[2].type = 0;
entry1[2].v.text = "CIM_IndicationFilter";
entry1[3].type = 0;
entry1[3].v.text = "CIM_ComputerSystem";
hash_alloc_insert(selectors, "Name", &entry1[0]);
hash_alloc_insert(selectors, "SystemName", &entry1[1]);
hash_alloc_insert(selectors, "CreationClassName", &entry1[2]);
hash_alloc_insert(selectors, "SystemCreationClassName", &entry1[3]);
filter_t *filter = filter_create_selector(selectors);
WsXmlDocH doc = ws_xml_create_envelope();
WsXmlNodeH body = ws_xml_get_soap_body(doc);
WsXmlNodeH node = ws_xml_add_child(body, XML_NS_ENUMERATION, WSENUM_ENUMERATE, NULL);
filter_t *filter_cpy = filter_copy(filter); //test filter_copy
int r = filter_serialize(node, filter_cpy, XML_NS_WS_MAN);
if(r) {
printf("\033[22;31mfilter serialize failed!\033[m\n");
return;
}
ws_xml_dump_doc(stdout, doc);
ws_xml_destroy_doc(doc);
filter_destroy(filter);
filter_destroy(filter_cpy);
hash_free(selectors);
u_free(entry1);
printf("\033[22;32m\"http://schemas.dmtf.org/wbem/wsman/1/wsman/SelectorFilter\" filter serialize successfully!\033[m\n\n");
}
static void deserialize_filter1(void)
{
WsXmlDocH doc = ws_xml_read_file("./sample1.xml", "UTF-8", 0);
WsXmlNodeH node = ws_xml_get_soap_body(doc);
node = ws_xml_get_child(node, 0, XML_NS_ENUMERATION, WSENUM_ENUMERATE);
filter_t *filter = filter_deserialize(node, XML_NS_WS_MAN);
if(filter == NULL) {
printf("\033[22;31mfilter deserialize failed!\033[m\n");
return;
}
ws_xml_destroy_doc(doc);
doc = ws_xml_create_envelope();
WsXmlNodeH body = ws_xml_get_soap_body(doc);
node = ws_xml_add_child(body, XML_NS_ENUMERATION, WSENUM_ENUMERATE, NULL);
int r = filter_serialize(node, filter, XML_NS_WS_MAN);
if(r) {
printf("\033[22;31mfilter serialize failed!\033[m\n");
return;
}
ws_xml_dump_doc(stdout, doc);
ws_xml_destroy_doc(doc);
filter_destroy(filter);
printf("\033[22;32m\"http://schemas.dmtf.org/wbem/wsman/1/cimbinding/associationFilter\" filter deserialize successfully!\033[m\n\n");
}
static void deserialize_filter2(void)
{
WsXmlDocH doc = ws_xml_read_file("./sample2.xml", "UTF-8", 0);
WsXmlNodeH node = ws_xml_get_soap_body(doc);
node = ws_xml_get_child(node, 0, XML_NS_ENUMERATION, WSENUM_ENUMERATE);
filter_t *filter = filter_deserialize(node, XML_NS_WS_MAN);
if(filter == NULL) {
printf("\033[22;31mfilter deserialize failed!\033[m\n");
return;
}
ws_xml_destroy_doc(doc);
doc = ws_xml_create_envelope();
WsXmlNodeH body = ws_xml_get_soap_body(doc);
node = ws_xml_add_child(body, XML_NS_ENUMERATION, WSENUM_ENUMERATE, NULL);
int r = filter_serialize(node, filter, XML_NS_WS_MAN);
if(r) {
printf("\033[22;31mfilter serialize failed!\033[m\n");
return;
}
ws_xml_dump_doc(stdout, doc);
ws_xml_destroy_doc(doc);
filter_destroy(filter);
printf("\033[22;32m\"http://schemas.microsoft.com/wbem/wsman/1/WQL\" filter deserialize successfully!\033[m\n\n");
}
static void deserialize_filter3(void)
{
WsXmlDocH doc = ws_xml_read_file("./sample3.xml", "UTF-8", 0);
WsXmlNodeH node = ws_xml_get_soap_body(doc);
node = ws_xml_get_child(node, 0, XML_NS_ENUMERATION, WSENUM_ENUMERATE);
filter_t *filter = filter_deserialize(node, XML_NS_WS_MAN);
if(filter == NULL) {
printf("\033[22;31mfilter deserialize failed!\033[m\n");
return;
}
filter_add_selector(filter, "__cimnamespace", "root/interop");
ws_xml_destroy_doc(doc);
doc = ws_xml_create_envelope();
WsXmlNodeH body = ws_xml_get_soap_body(doc);
node = ws_xml_add_child(body, XML_NS_ENUMERATION, WSENUM_ENUMERATE, NULL);
int r = filter_serialize(node, filter, XML_NS_WS_MAN);
if(r) {
printf("\033[22;31mfilter serialize failed!\033[m\n");
return;
}
ws_xml_dump_doc(stdout, doc);
ws_xml_destroy_doc(doc);
filter_destroy(filter);
printf("\033[22;32m\"http://schemas.dmtf.org/wbem/wsman/1/wsman/SelectorFilter\" filter deserialize successfully!\033[m\n\n");
}
int main(void)
{
serialize_filter1();
serialize_filter2();
serialize_filter3();
deserialize_filter1();
deserialize_filter2();
deserialize_filter3();
return 0;
}