-
Notifications
You must be signed in to change notification settings - Fork 0
/
Schema.py
117 lines (99 loc) · 4.59 KB
/
Schema.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
sipptam.conf.Schema
~~~~~~~~~~~~~~~~~~~
Contains a basic XML schema to parse the input configuration file.
:copyright: (c) 2013 by luismartingil.
:license: See LICENSE_FILE.
"""
import StringIO
schema = StringIO.StringIO('''\
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="sipptam">
<xs:complexType>
<xs:sequence>
<xs:element name="tas" type="tasType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="testrun" type="testrunType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="config" type="configType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="mod" type="modType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="advanced" type="advancedType" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="duthost" type="xs:string" use="required"/>
<xs:attribute name="dutport" type="xs:positiveInteger" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="tasType">
<xs:attribute name="host" type="IPType" use="required"/>
<xs:attribute name="port" type="xs:string" use="required"/>
<xs:attribute name="jobs" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="testrunType">
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="scenarioPath" type="xs:string" use="required"/>
<xs:attribute name="configlink" type="xs:string" use="required"/>
<xs:attribute name="modlink" type="xs:string"/>
</xs:complexType>
<xs:complexType name="configType">
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="ratio" type="numberListType" use="required"/>
<xs:attribute name="max" type="numberListType" use="required"/>
<xs:attribute name="pause" type="positiveFloat" use="required"/>
<xs:attribute name="tries" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="modType">
<xs:sequence>
<xs:element name="replace" type="replaceType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="injection" type="injectionType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="replaceType">
<xs:attribute name="regex" type="xs:string" use="required"/>
<xs:attribute name="src" type="xs:string" use="required"/>
<xs:attribute name="dst" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="injectionType">
<xs:attribute name="regex" type="xs:string" use="required"/>
<xs:attribute name="path" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="advancedType">
<xs:attribute name="execMode" type="execModeType" use="required"/>
<xs:attribute name="scenarioValidate" type="myBoolType" use="required"/>
<xs:attribute name="regexValidate" type="myBoolType" use="required"/>
</xs:complexType>
<xs:simpleType name="numberListType">
<xs:restriction base="xs:string">
<xs:pattern value="([0-9]*)((;[0-9]+)*)?"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="execModeType">
<xs:restriction base="xs:string">
<xs:enumeration value="serial"/>
<xs:enumeration value="parallel"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IPType">
<xs:restriction base="xs:string">
<xs:pattern value="(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="anyOrIPType">
<xs:restriction base="xs:string">
<xs:pattern value="((([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))|(\*)"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="positiveFloat">
<xs:restriction base="xs:float">
<xs:minInclusive value="0.0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="myBoolType">
<xs:restriction base="xs:string">
<xs:enumeration value="True"/>
<xs:enumeration value="False"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
''')