First code commit
diff --git a/XML-RPC.xsd b/XML-RPC.xsd
new file mode 100644
index 0000000..a7e7567
--- /dev/null
+++ b/XML-RPC.xsd
@@ -0,0 +1,133 @@
+<?xml version="1.0"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <!-- The only two possible root elements are methodResponse and
+ methodCall so these are the only two I use a top-level
+ declaration for. -->
+
+ <xsd:element name="methodCall">
+ <xsd:complexType>
+ <xsd:all>
+ <xsd:element name="methodName">
+ <xsd:simpleType>
+ <xsd:restriction base="ASCIIString">
+ <xsd:pattern value="([A-Za-z0-9]|/|\.|:|_)*" />
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ <xsd:element name="params" minOccurs="0" maxOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="param" type="ParamType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:all>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="methodResponse">
+ <xsd:complexType>
+ <xsd:choice>
+ <xsd:element name="params">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="param" type="ParamType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="fault">
+ <!-- What can appear inside a fault is very restricted -->
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="struct">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="member"
+ type="MemberType">
+ </xsd:element>
+ <xsd:element name="member"
+ type="MemberType">
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="ParamType">
+ <xsd:sequence>
+ <xsd:element name="value" type="ValueType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ValueType" mixed="true">
+ <!-- I need to figure out how to say that this
+ is either a simple xsd:string type or that
+ it contains one of these elements; but that otherwise
+ it does not have mixed content -->
+ <xsd:choice>
+ <xsd:element name="i4" type="xsd:int"/>
+ <xsd:element name="int" type="xsd:int"/>
+ <xsd:element name="string" type="ASCIIString"/>
+ <xsd:element name="double" type="xsd:decimal"/>
+ <xsd:element name="Base64" type="xsd:base64Binary"/>
+ <xsd:element name="boolean" type="NumericBoolean"/>
+ <xsd:element name="dateTime.iso8601" type="xsd:dateTime"/>
+ <xsd:element name="array" type="ArrayType"/>
+ <xsd:element name="struct" type="StructType"/>
+ </xsd:choice>
+ </xsd:complexType>
+
+ <xsd:complexType name="StructType">
+ <xsd:sequence>
+ <xsd:element name="member" type="MemberType"
+ maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="MemberType">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string" />
+ <xsd:element name="value" type="ValueType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="ArrayType">
+ <xsd:sequence>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="ValueType"
+ minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:simpleType name="ASCIIString">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="([ -~]|\n|\r|\t)*" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+ <xsd:simpleType name="NumericBoolean">
+ <xsd:restriction base="xsd:boolean">
+ <xsd:pattern value="0|1" />
+ </xsd:restriction>
+ </xsd:simpleType>
+
+</xsd:schema>
+
diff --git a/XML_RPC.ttcn b/XML_RPC.ttcn
new file mode 100644
index 0000000..2da1793
--- /dev/null
+++ b/XML_RPC.ttcn
@@ -0,0 +1,189 @@
+/*******************************************************************************
+* Copyright (c) 2000-2018 Ericsson Telecom AB
+*
+* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*******************************************************************************/
+//
+// File: XML_RPC.ttcn
+// Description:
+// References:
+// Rev:
+// Prodnr:
+// Updated: Thu Aug 2 13:51:04 2018
+// Contact: http://ttcn.ericsson.se
+//
+////////////////////////////////////////////////////////////////////////////////
+// Generated from file(s):
+// - XML-RPC.xsd
+// /* xml version = "1.0" */
+// /* targetnamespace = "NoTargetNamespace" */
+////////////////////////////////////////////////////////////////////////////////
+// Modification header(s):
+//-----------------------------------------------------------------------------
+// Modified by:
+// Modification date:
+// Description:
+// Modification contact:
+//------------------------------------------------------------------------------
+////////////////////////////////////////////////////////////////////////////////
+
+
+module XML_RPC {
+
+
+import from XSD all;
+
+
+external function enc_MethodCall(in MethodCall pdu) return octetstring
+with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }
+
+external function dec_MethodCall(in octetstring stream) return MethodCall
+with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }
+
+
+
+
+external function enc_MethodResponse(in MethodResponse pdu) return octetstring
+with { extension "prototype (convert) encode(XER:XER_EXTENDED)" }
+
+external function dec_MethodResponse(in octetstring stream) return MethodResponse
+with { extension "prototype (convert) decode(XER:XER_EXTENDED)" }
+
+
+
+
+
+
+type record MethodCall
+{
+ record of enumerated {
+ methodName,
+ params
+ } order,
+ XSD.String methodName (pattern "([A-Za-z0-9]|/|.|:|_)*"),
+ record {
+ record of ParamType param_list
+ } params optional
+}
+with {
+ variant "name as uncapitalized";
+ variant "useOrder";
+ variant "element";
+ variant (params.param_list) "untagged";
+ variant (params.param_list[-]) "name as 'param'";
+};
+
+
+type record MethodResponse
+{
+ union {
+ record {
+ ParamType param_
+ } params,
+ /* What can appear inside a fault is very restricted */
+ record {
+ record {
+ record {
+ MemberType member,
+ MemberType member_1
+ } struct
+ } value_
+ } fault
+ } choice
+}
+with {
+ variant "name as uncapitalized";
+ variant "element";
+ variant (choice) "untagged";
+ variant (choice.params.param_) "name as 'param'";
+ variant (choice.fault.value_) "name as 'value'";
+ variant (choice.fault.value_.struct.member_1) "name as 'member'";
+};
+
+
+type record ParamType
+{
+ ValueType value_
+}
+with {
+ variant (value_) "name as 'value'";
+};
+
+
+
+type record ValueType
+{
+ record of XSD.String embed_values,
+ union {
+ XSD.Int i4,
+ // XSD.Int int,
+ ASCIIString string,
+ XSD.Decimal double,
+ XSD.Base64Binary base64,
+ NumericBoolean boolean_,
+ XSD.DateTime dateTime_iso8601,
+ ArrayType array,
+ StructType struct
+ } choice
+}
+with {
+ variant "embedValues";
+ variant (choice) "untagged";
+ variant (choice.base64) "name as capitalized";
+ variant (choice.boolean_) "name as 'boolean'";
+ variant (choice.dateTime_iso8601) "name as 'dateTime.iso8601'";
+};
+
+
+type record StructType
+{
+ record length(1 .. infinity) of MemberType member_list
+}
+with {
+ variant (member_list) "untagged";
+ variant (member_list[-]) "name as 'member'";
+};
+
+
+type record MemberType
+{
+ XSD.String name,
+ ValueType value_
+}
+with {
+ variant (value_) "name as 'value'";
+};
+
+
+type record ArrayType
+{
+ record {
+ record of ValueType value_list
+ } data
+}
+with {
+ variant (data.value_list) "untagged";
+ variant (data.value_list[-]) "name as 'value'";
+};
+
+
+type XSD.String ASCIIString (pattern "([ -~]|\n|\r|\t)*");
+
+
+type XSD.Boolean NumericBoolean;
+//with {
+//variant "text 'true' as '1'";
+//variant "text 'false' as '0'";
+//};
+
+
+}
+with {
+encode "XML";
+variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
+}
diff --git a/XML_RPC_test.ttcn b/XML_RPC_test.ttcn
new file mode 100644
index 0000000..faabc38
--- /dev/null
+++ b/XML_RPC_test.ttcn
@@ -0,0 +1,630 @@
+/*******************************************************************************
+* Copyright (c) 2000-2018 Ericsson Telecom AB
+*
+* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*******************************************************************************/
+//
+// File: XML_RPC_test.ttcn
+// Description: XML_RPC encoding-decoding test
+// Rev: <RnXnn>
+// Prodnr:
+// Updated:
+// Contact:
+///////////////////////////////////////////////
+module XML_RPC_test {
+
+
+import from XML_RPC all;
+
+type component Test_CT {
+}
+
+template MethodResponse t_GetVoucherHistoryResponse := {
+ choice := {
+ params := {
+ param_ := {
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ struct := {
+ member_list := {
+ {
+ name := "responseCode",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ i4 := 0
+ }
+ }
+ },
+ {
+ name := "agent",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "BZ101"
+ }
+ }
+ },
+ {
+ name := "batchId",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "ABC1234"
+ }
+ }
+ },
+ {
+ name := "currency",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "EUR"
+ }
+ }
+ },
+ {
+ name := "expiryDate",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ dateTime_iso8601 := "2003-07-17T00:00:00"
+ }
+ }
+ },
+ {
+ name := "voucherGroup",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "A1"
+ }
+ }
+ },
+ {
+ name := "state",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ i4 := 2
+ }
+ }
+ },
+ {
+ name := "value",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "10000"
+ }
+ }
+ },
+ {
+ name := "extensionText1",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "VoucherType=1,Market=Europe"
+ }
+ }
+ },
+ {
+ name := "extensionText2",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "19990817T00:00:00"
+ }
+ }
+ },
+ {
+ name := "extensionText3",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ string := "42"
+ }
+ }
+ },
+ {
+ name := "transactionRecords",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ array := {
+ data := {
+ value_list := {
+ {
+ embed_values:={"",""},
+ choice := {
+ struct := {
+ member_list :=
+ {
+ {
+ name := "operatorId",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ string := "administrator"
+ }
+ }
+ },
+ {
+ name := "newState",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ i4 := 5
+ }
+ }
+ },
+ {
+ name := "timestamp",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ dateTime_iso8601 := "2002-10-09T02:39:55"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ embed_values:={"",""},
+ choice := {
+ struct := {
+ member_list :=
+ {
+ {
+ name := "operatorId",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ string := "administrator"
+ }
+ }
+ },
+ {
+ name := "newState",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ i4 := 0
+ }
+ }
+ },
+ {
+ name := "timestamp",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ dateTime_iso8601 := "2002-10-10T01:39:54"
+ }
+ }
+ }
+ }
+ }
+ }}
+ ,
+ {
+ embed_values:={"",""},
+ choice := {
+
+ struct := {
+ member_list :=
+ {
+ {
+ name := "subscriberId",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ string := "706691616"
+ }
+ }
+ },
+ {
+ name := "timestamp",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ dateTime_iso8601 := "2002-10-10T01:39:54"
+ }
+ }
+ },
+ {
+ name := "transactionId",
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+
+ string := "123456"
+ }
+ }
+ },
+ {
+ name := "newState", // newState put at the end
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ // to test whether SET OF works
+ i4 := 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+template MethodResponse t_GetVoucherHistoryResponse1 := {
+ choice := {
+ params := {
+ param_ := {
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ struct := {
+ member_list := {
+ {
+ name := "responseCode",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ i4 := 0
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+
+template MethodCall t_DeleteTask_SingleParam :=
+{
+ order:={methodName, params},
+ methodName := "DeleteTask",
+ params := {
+ param_list := {{
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ struct := {
+ member_list := {
+ {
+ name := "taskId",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+
+ i4 := 44
+ }
+ }
+ }}
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+template MethodCall/*_MultipleParams */ t_GetGenerateVoucherUsageReportTaskInfo :=
+{
+ order:={methodName, params},
+ methodName := "GetGenerateVoucherUsageReportTaskInfo",
+ params := {
+ param_list := {
+ {
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ struct := {
+ member_list := { {
+ name := "originNodeType",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "IVR"
+ }}
+ }}
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
+
+
+template MethodCall t_GeneralUpdate_SingleParam := {
+ order:={methodName, params},
+ methodName := "GeneralUpdate",
+ params := {
+ param_list := { {
+ value_ := {
+ embed_values:={"",""},
+ choice := {
+ struct := {
+ member_list := {
+ {
+ name := "originNodeType",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "IVR"
+ }}
+ },
+ {
+ name := "originHostName",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "ws00824"
+ }}
+ },
+ {
+ name := "originTransactionID",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "31349729532086766516"
+ }}
+ },
+ {
+ name := "originTimeStamp",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ dateTime_iso8601 := "2012-02-06T13:19:00"
+ }
+ }
+ },
+ {
+ name := "subscriberNumber",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "4558024013"
+ }}
+ },
+ {
+ name := "transactionCurrency",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "SEK"
+ }}
+ },
+ {
+ name := "offerUpdateInformationList",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ array := {
+ data := {
+ value_list := {
+ {
+ embed_values:={"",""},
+ choice:= {
+ struct := {
+ member_list := {
+ {
+ name := "offerID",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ i4 := 20// int := 20
+ }
+ }
+ },
+ {
+ name := "startDate",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ dateTime_iso8601 := "2012-02-07T12:00:00+00:00"
+ }
+ }
+ },
+ {
+ name := "expiryDate",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ dateTime_iso8601 := "2012-02-10T12:00:00+00:00"
+ }
+ }
+ },
+ {
+ name := "offerType",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ i4 := 0// int := 0
+ }
+ }
+ },
+ {
+ name := "dedicatedAccountUpdateInformation",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ array := {
+ data := {
+ value_list := {
+ {
+ embed_values:={"",""},
+ choice:= {
+ struct := {
+ member_list := {
+ {
+ name := "dedicatedAccountID",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ i4 := 1// int := 1
+ }
+ }
+ },
+ {
+ name := "dedicatedAccountValueNew",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ string := "100"
+ }
+ }
+ },
+ {
+ name := "dedicatedAccountUnitType",
+ value_ := {
+ embed_values:={"",""},
+ choice:= {
+ i4 := 1// int := 1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+}
+
+testcase tc_TestEncDec() runs on Test_CT {
+
+log (t_GetVoucherHistoryResponse);
+var MethodResponse pdu := valueof(t_GetVoucherHistoryResponse);
+var octetstring encodedPdu;
+
+encodedPdu := enc_MethodResponse(pdu);
+log(encodedPdu);
+
+
+
+
+log(dec_MethodResponse(encodedPdu))
+
+
+if (match(dec_MethodResponse(encodedPdu), t_GetVoucherHistoryResponse)) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+
+log (t_DeleteTask_SingleParam);
+var MethodCall pdu2 := valueof(t_DeleteTask_SingleParam);
+
+var octetstring encodedPdu2;
+
+encodedPdu2 := enc_MethodCall(pdu2);
+log(encodedPdu2);
+
+log(dec_MethodCall(encodedPdu2))
+if (match(dec_MethodCall(encodedPdu2), t_DeleteTask_SingleParam)) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+
+log (t_GetGenerateVoucherUsageReportTaskInfo);
+var MethodCall pdu3 := valueof(t_GetGenerateVoucherUsageReportTaskInfo);
+var octetstring encodedPdu3;
+
+encodedPdu3 := enc_MethodCall(pdu3);
+log(encodedPdu3);
+
+log(dec_MethodCall(encodedPdu3))
+if (match(dec_MethodCall(encodedPdu3), t_GetGenerateVoucherUsageReportTaskInfo)) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+log (t_GeneralUpdate_SingleParam );
+var MethodCall pdu4 := valueof(t_GeneralUpdate_SingleParam );
+
+var octetstring encodedPdu4;
+
+encodedPdu4 := enc_MethodCall(pdu4);
+log(encodedPdu4);
+
+log(dec_MethodCall(encodedPdu4))
+if (match(dec_MethodCall(encodedPdu4), t_GeneralUpdate_SingleParam )) {
+setverdict(pass);
+} else {
+setverdict(fail);
+}
+
+}
+
+
+control {
+ execute(tc_TestEncDec())
+}
+
+}