Skip to content

Examples

Roberto Hermoso edited this page Feb 25, 2020 · 2 revisions

Examples

All tests will be done with the OAS_test_suite.yaml specification

isDeadParameter

IDL file:

IF p1 THEN NOT p2;
IF p2 THEN p3==5;
IF NOT p1 THEN p4;
IF p4 THEN p5==p7; // Complex with 2 types
IF NOT (p4 OR p6) THEN p5 AND p7;
OnlyOne(Or(p7, p8), Or(p9, p10)); // Complex with 2 types
IF p7 OR p8 THEN p9 OR p10;
IF p1==true THEN NOT (p2==3 OR p4==4) AND p7;
IF p3 THEN AllOrNone(p1, p2); // Complex with 2 types
IF p8 THEN p9;

Operation path: /combiantorial2

/combinatorial2:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: false
          type: "boolean"
        - name: "p2"
          in: "query"
          required: false
          type: "integer"
        - name: "p3"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p4"
          in: "query"
          required: false
          type: "integer"
        - name: "p5"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p6"
          in: "query"
          required: false
          type: "boolean"
        - name: "p7"
          in: "query"
          required: false
          type: "integer"
        - name: "p8"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p9"
          in: "query"
          required: false
          type: "integer"
        - name: "p10"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
      responses:
        default:
          description: "Default"

Code

 Analyzer analyzer = new Analyzer("oas","combinatorial2.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial2", "get");

analyzer.isDeadParameter("p1") //The parameter p1 should NOT be dead
analyzer.isDeadParameter("p2") //The parameter p2 SHOULD be dead

isFaleOptional

IDL file:

IF p1 THEN NOT p2;
IF p2 THEN p3==5;
IF NOT p1 THEN p4;
IF p4 THEN p5==p7; // Complex with 2 types
IF NOT (p4 OR p6) THEN p5 AND p7;
OnlyOne(Or(p7, p8), Or(p9, p10)); // Complex with 2 types
IF p7 OR p8 THEN p9 OR p10;
IF p1==true THEN NOT (p2==3 OR p4==4) AND p7;
IF p3 THEN AllOrNone(p1, p2); // Complex with 2 types
IF p8 THEN p9;

Operation path: /combiantorial2

/combinatorial2:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: false
          type: "boolean"
        - name: "p2"
          in: "query"
          required: false
          type: "integer"
        - name: "p3"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p4"
          in: "query"
          required: false
          type: "integer"
        - name: "p5"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p6"
          in: "query"
          required: false
          type: "boolean"
        - name: "p7"
          in: "query"
          required: false
          type: "integer"
        - name: "p8"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p9"
          in: "query"
          required: false
          type: "integer"
        - name: "p10"
          in: "query"
          required: false
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
      responses:
        default:
          description: "Default"

Code

  Analyzer analyzer = new Analyzer("oas","combinatorial2.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial2", "get");

analyzer.isFalseOptional("p1") //The parameter p1 IS a dead parameter
analyzer.isFalseOptional("p2") //The parameter p2 is NOT a false optional

isValidIDL

Not Valid

IDL file:

IF p1=='value1' THEN p2=='value2';
IF p3<1 THEN p4>5;
IF NOT (p2<=3 OR p3<=4 OR p2=='value5') AND NOT p1=='value3' THEN p3<=2;
IF p5<=4 THEN NOT p3<4;
AllOrNone(p3==3, p3==3);
AllOrNone(p3 OR p4 OR p4, p1, p2);
AllOrNone(p1=='invalid value', p2=='another invalid value', p5==10);
OnlyOne(p5==1, p5==1);
OnlyOne(p1, p2, p3, p4, p5);
OnlyOne(p1=='value2' AND p5>-1, p3>3);

Operation path: /combiantorial6

/combinatorial6:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: true
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p2"
          in: "query"
          required: true
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p3"
          in: "query"
          required: true
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p4"
          in: "query"
          required: true
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
        - name: "p5"
          in: "query"
          required: true
          type: "integer"
          enum:
            - 1
            - 2
            - 3
            - 4
            - 5
      responses:
        default:
          description: "Default"

Code

 Analyzer analyzer = new Analyzer("oas","combinatorial6.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial6", "get");

analyzer.isValidIDL(); //The IDL is NOT valid

Valid

IDL file:

IF NOT p1==false THEN p2=='something' AND p3==5;
Or(p4=='string 1'|'string 2', p5<-200, p6==true);
ZeroOrOne(p7=='another example', p8>=10);
p3*p5*p8<5;
Or(p1==p6, p4==p7);

Operation path: /combiantorial5

 /combinatorial5:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: true
          type: "boolean"
        - name: "p2"
          in: "query"
          required: true
          type: "string"
        - name: "p3"
          in: "query"
          required: true
          type: "integer"
        - name: "p4"
          in: "query"
          required: true
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p5"
          in: "query"
          required: true
          type: "integer"
        - name: "p6"
          in: "query"
          required: true
          type: "boolean"
        - name: "p7"
          in: "query"
          required: true
          type: "string"
        - name: "p8"
          in: "query"
          required: true
          type: "integer"
        - name: "p9"
          in: "query"
          required: true
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p10"
          in: "query"
          required: true
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
      responses:
        default:
          description: "Default"

Code

Analyzer analyzer = new Analyzer("oas","combinatorial5.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial5", "get")

analyzer.isValidIDL(); //The IDL is VALID

validRequest

Valid request

IDL file

Or(p1=='value1', p2=='value1');
OnlyOne(p2=='value2', p3=='value2');
AllOrNone(p2=='value3', p3=='value4');
ZeroOrOne(p4=='value5', p5=='value6');
p1==p5;

Operation path: /combiantorial1

/combinatorial1:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: true
          type: "string"
        - name: "p2"
          in: "query"
          required: true
          type: "string"
        - name: "p3"
          in: "query"
          required: true
          type: "string"
        - name: "p4"
          in: "query"
          required: true
          type: "string"
        - name: "p5"
          in: "query"
          required: true
          type: "string"
      responses:
        default:
          description: "Default"

Code

Analyzer analyzer = new Analyzer("oas","combinatorial1.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial1", "get");
    Map<String, String> request = new HashMap<>();
    request.put("p1", "value1");
    request.put("p2", "value2");
    request.put("p3", "value3");
    request.put("p4", "value4");
    request.put("p5", "value1");

analyzer.validRequest(request) //The request is VALID

Not valid request

IDL file

Or(p1=='value1', p2=='value1');
OnlyOne(p2=='value2', p3=='value2');
AllOrNone(p2=='value3', p3=='value4');
ZeroOrOne(p4=='value5', p5=='value6');
p1==p5;

Operation path: /combiantorial1

/combinatorial1:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: true
          type: "string"
        - name: "p2"
          in: "query"
          required: true
          type: "string"
        - name: "p3"
          in: "query"
          required: true
          type: "string"
        - name: "p4"
          in: "query"
          required: true
          type: "string"
        - name: "p5"
          in: "query"
          required: true
          type: "string"
      responses:
        default:
          description: "Default"

Code

Analyzer analyzer = new Analyzer("oas","combinatorial1.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial1", "get");
    Map<String, String> request = new HashMap<>();
    request.put("p1", "value1");
    request.put("p2", "value2");
    request.put("p3", "value3");
    request.put("p4", "value4");
    request.put("p5", "value5"); // Violates this dependency: p1==p5;

analyzer.validRequest(request) //The request is NOT valid

validPartialRequest

Valid

IDL file

ZeroOrOne(p7 AND p8, p7 AND p8 OR p9=='value5');
AllOrNone(p4 AND p5, p6 AND p7);
NOT ZeroOrOne(p5==1000, p4==10000 OR p3==100000, p2==1000000);
IF p1 AND Or(p2, p3) THEN p1+p2+p4<=999 AND OnlyOne(p6, AllOrNone(p7, p8));
IF NOT (p4==p5 AND ZeroOrOne(p6, p7)) THEN Or(p6=='value1', p7 AND p8=='value3') OR OnlyOne(p1, p3);

Operation path: /combiantorial4

/combinatorial4:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: false
          type: "integer"
        - name: "p2"
          in: "query"
          required: false
          type: "integer"
        - name: "p3"
          in: "query"
          required: false
          type: "integer"
        - name: "p4"
          in: "query"
          required: false
          type: "integer"
        - name: "p5"
          in: "query"
          required: false
          type: "integer"
        - name: "p6"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p7"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p8"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p9"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p10"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
      responses:
        default:
          description: "Default"

Code

Analyzer analyzer = new Analyzer("oas","combinatorial4.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial4", "get");
    Map<String, String> partialRequest = new HashMap<>();
    partialRequest.put("p2", "1000000");
    partialRequest.put("p3", "100000");
    partialRequest.put("p4", "10000");
    partialRequest.put("p5", "1000");
    analyzer.validPartialRequest(partialRequest) //The partial request is VALID

Not valid

IDL file

ZeroOrOne(p7 AND p8, p7 AND p8 OR p9=='value5');
AllOrNone(p4 AND p5, p6 AND p7);
NOT ZeroOrOne(p5==1000, p4==10000 OR p3==100000, p2==1000000);
IF p1 AND Or(p2, p3) THEN p1+p2+p4<=999 AND OnlyOne(p6, AllOrNone(p7, p8));
IF NOT (p4==p5 AND ZeroOrOne(p6, p7)) THEN Or(p6=='value1', p7 AND p8=='value3') OR OnlyOne(p1, p3);

Operation path: /combiantorial4

/combinatorial4:
    get:
      parameters:
        - name: "p1"
          in: "query"
          required: false
          type: "integer"
        - name: "p2"
          in: "query"
          required: false
          type: "integer"
        - name: "p3"
          in: "query"
          required: false
          type: "integer"
        - name: "p4"
          in: "query"
          required: false
          type: "integer"
        - name: "p5"
          in: "query"
          required: false
          type: "integer"
        - name: "p6"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p7"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p8"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p9"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
        - name: "p10"
          in: "query"
          required: false
          type: "string"
          enum:
            - "value1"
            - "value2"
            - "value3"
            - "value4"
            - "value5"
      responses:
        default:
          description: "Default"

Code

Analyzer analyzer = new Analyzer("oas","combinatorial4.idl", "./src/test/resources/OAS_test_suite.yaml", "/combinatorial4", "get");
    Map<String, String> partialRequest = new HashMap<>();
      partialRequest.put("p2", "1000000");
      partialRequest.put("p3", "100000");
      partialRequest.put("p4", "10000");
      partialRequest.put("p5", "1000");
      partialRequest.put("p8", "value5"); // If this parameter was removed, the request would be partially valid, since including p6 AND p7 would make it fully valid. As p8 is present, including p6 AND p7 would violate: ZeroOrOne(p7 AND p8, p7 AND p8 OR p9=='value5');

    analyzer.validPartialRequest(partialRequest) //The partial request is NOT valid
Clone this wiki locally