// gSOAP v2 Interop B test round 2
#include "soapH.h"
int main(int argc, char **argv)
{ struct soap soap;
int i, g;
xsd__string s = "Hello World! <>&";
xsd__int n = 2147483647;
xsd__float f = 3.40282e+38;
struct ArrayOfstring a;
struct ArrayOfstring2D aai, aao;
struct s__SOAPStruct sti;
struct ns__echoStructAsSimpleTypesResponse Ro;
struct ns__echoSimpleTypesAsStructResponse Rsto;
struct s__SOAPStructStruct ssti;
struct ns__echoNestedStructResponse Rssto;
struct s__SOAPArrayStruct sati;
struct ns__echoNestedArrayResponse Rsato;
FILE *fd = fopen("interop2Bfaults.html", "a");
soap_init(&soap);
fprintf(fd, "");
soap.send_timeout = 30;
soap.recv_timeout = 30;
sti.varString = "Hello";
sti.varInt = &n;
sti.varFloat = &f;
ssti.varString = "SOAP!";
ssti.varInt = &n;
ssti.varFloat = &f;
ssti.varStruct = &sti;
a.__size = 5;
a.__offset = 2;
a.__ptr = (char**)malloc(a.__size*sizeof(char*));
a.__ptr[0] = "Interop";
a.__ptr[1] = "Test";
a.__ptr[2] = "Round";
a.__ptr[3] = "2";
a.__ptr[4] = a.__ptr[1];
aai.__size[0] = 2;
aai.__size[1] = 3;
aai.__offset[0] = 0;
aai.__offset[1] = 0;
aai.__ptr = (char**)malloc(aai.__size[0]*aai.__size[1]*sizeof(char*));
aai.__ptr[0] = "Interop Test";
aai.__ptr[1] = NULL;
aai.__ptr[2] = "Round";
aai.__ptr[3] = "2";
aai.__ptr[4] = a.__ptr[1];
aai.__ptr[5] = NULL;
sati.varString = a.__ptr[0];
sati.varInt = &n;
sati.varFloat = &f;
sati.varArray = a;
if (argc < 2)
return -1;
if (soap_call_ns__echoStructAsSimpleTypes(&soap, argv[1], "http://soapinterop.org/", sti, Ro))
{ printf("
FAULT | \n", argv[1]);
fprintf(fd, "", argv[1]);
soap_print_fault(&soap, fd);
soap_print_fault_location(&soap, fd);
fprintf(fd, "
");
}
else if (!Ro._outputString || strcmp(sti.varString, Ro._outputString) || !Ro._outputInteger || *sti.varInt != *Ro._outputInteger
|| !Ro._outputFloat || *sti.varFloat != *Ro._outputFloat)
{ printf("FAIL | \n", argv[1]);
fprintf(fd, "Structs differ. Input:%s\n%d\n%.7G
Response:%s\n%d\n%.7G
",
argv[1], sti.varString, *sti.varInt, *sti.varFloat, Ro._outputString?Ro._outputString:"NULL", Ro._outputInteger?*Ro._outputInteger:0, Ro._outputFloat?*Ro._outputFloat:0);
}
else
printf("PASS | \n");
fflush(stdout);
if (soap_call_ns__echoSimpleTypesAsStruct(&soap, argv[1], "http://soapinterop.org/", s, &n, &f, Rsto))
{ printf("FAULT | \n", argv[1]);
fprintf(fd, "", argv[1]);
soap_print_fault(&soap, fd);
soap_print_fault_location(&soap, fd);
fprintf(fd, "
");
}
else if (!Rsto._return.varString || strcmp(s, Rsto._return.varString) || !Rsto._return.varInt || n != *Rsto._return.varInt || !Rsto._return.varFloat || f != *Rsto._return.varFloat)
{ printf("FAIL | \n", argv[1]);
fprintf(fd, "Structs differ. Input:%s\n%d\n%.7G
Response:%s\n%d\n%.7G
", argv[1], s, n, f, Rsto._return.varString, Rsto._return.varInt?*Rsto._return.varInt:0, Rsto._return.varFloat?*Rsto._return.varFloat:0.0);
}
else
printf("PASS | \n");
fflush(stdout);
if (soap_call_ns__echo2DStringArray(&soap, argv[1], "http://soapinterop.org/", aai, aao))
{ printf("FAULT | \n", argv[1]);
fprintf(fd, "", argv[1]);
soap_print_fault(&soap, fd);
soap_print_fault_location(&soap, fd);
fprintf(fd, "
");
}
else
{ g = 0;
if (aai.__size[0] != aao.__size[0] || aai.__size[1] != aao.__size[1] || !aao.__ptr)
g = 1;
else
for (i = 0; i < aai.__size[0]*aai.__size[1]; i++)
if (aai.__ptr[i] && (!aao.__ptr[i] || strcmp(aai.__ptr[i], aao.__ptr[i])))
g = 1;
if (g)
{ printf("FAIL | \n", argv[1]);
fprintf(fd, "2D string arrays differ. Input:", argv[1]);
for (i = 0; i < aai.__size[0]*aai.__size[1]; i++)
fprintf(fd, "%s\n", aai.__ptr[i]);
fprintf(fd, "Response:");
for (i = 0; i < aao.__size[0]*aao.__size[1]; i++)
fprintf(fd, "%s\n", aao.__ptr[i]);
fprintf(fd, "\n");
}
else
printf("PASS | \n");
}
fflush(stdout);
if (soap_call_ns__echoNestedStruct(&soap, argv[1], "http://soapinterop.org/", ssti, Rssto))
{ printf("FAULT | \n", argv[1]);
fprintf(fd, "", argv[1]);
soap_print_fault(&soap, fd);
soap_print_fault_location(&soap, fd);
fprintf(fd, "
");
}
else if (!Rssto._return.varString || strcmp(ssti.varString, Rssto._return.varString) ||
!Rssto._return.varInt || *ssti.varInt != *Rssto._return.varInt ||
!Rssto._return.varFloat || *ssti.varFloat != *Rssto._return.varFloat ||
!Rssto._return.varStruct ||
!Rssto._return.varStruct->varString || strcmp(ssti.varStruct->varString, Rssto._return.varStruct->varString) ||
!Rssto._return.varStruct->varInt || *ssti.varStruct->varInt != *Rssto._return.varStruct->varInt ||
!Rssto._return.varStruct->varFloat || *ssti.varStruct->varFloat != *Rssto._return.varStruct->varFloat)
{ printf("FAIL | \n", argv[1]);
fprintf(fd, "Nested structs differ.
", argv[1]);
}
else
printf("PASS | \n");
fflush(stdout);
if (soap_call_ns__echoNestedArray(&soap, argv[1], "http://soapinterop.org/", sati, Rsato))
{ printf("FAULT | \n", argv[1]);
fprintf(fd, "", argv[1]);
soap_print_fault(&soap, fd);
soap_print_fault_location(&soap, fd);
fprintf(fd, "
");
}
else if (!Rsato._return.varString || strcmp(sati.varString, Rsato._return.varString) ||
!Rsato._return.varInt || *sati.varInt != *Rsato._return.varInt ||
!Rsato._return.varFloat || *sati.varFloat != *Rsato._return.varFloat ||
sati.varArray.__size+sati.varArray.__offset != Rsato._return.varArray.__size+Rsato._return.varArray.__offset)
{ printf("FAIL | \n", argv[1]);
fprintf(fd, "Nested struct arrays differ
", argv[1]);
}
else
{ g = 0;
for (i = sati.varArray.__offset; i < sati.varArray.__size+sati.varArray.__offset; i++)
if (!Rsato._return.varArray.__ptr[i-Rsato._return.varArray.__offset] ||
strcmp(sati.varArray.__ptr[i-sati.varArray.__offset], Rsato._return.varArray.__ptr[i-Rsato._return.varArray.__offset]))
g = 1;
if (g)
{ printf("FAIL | \n", argv[1]);
fprintf(fd, "Nested struct arrays differ.
", argv[1]);
}
else
printf("PASS | \n");
}
fflush(stdout);
fprintf(fd, "");
fclose(fd);
return 0;
}
struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/"},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"},
//{"SOAP-ENV", "http://www.w3.org/2002/06/soap-envelope"}, // SOAP 1.2
//{"SOAP-ENC", "http://www.w3.org/2002/06/soap-encoding"}, // SOAP 1.2
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance"},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema"},
{"ns", "http://soapinterop.org/"},
{"s", "http://soapinterop.org/xsd"},
{NULL, NULL}
};