Endava / cats

CATS is a REST API Fuzzer and negative testing tool for OpenAPI endpoints. CATS automatically generates, runs and reports tests with minimum configuration and no coding effort. Tests are self-healing and do not require maintenance.
Apache License 2.0
1.11k stars 75 forks source link

NullPointerException in PayloadGenerator.parseFromInnerSchema #44

Closed jvert closed 1 year ago

jvert commented 2 years ago

(swagger.json in the attached zip file)

./cats --debug --paths=/api/groopits/create --contract=swagger.json --dryRun --server=http://example.com

java.lang.NullPointerException at com.endava.cats.model.generator.PayloadGenerator.parseFromInnerSchema(PayloadGenerator.java:360) at com.endava.cats.model.generator.PayloadGenerator.processSchemaProperties(PayloadGenerator.java:342) at com.endava.cats.model.generator.PayloadGenerator.resolveModelToExample(PayloadGenerator.java:318) at com.endava.cats.model.generator.PayloadGenerator.getExampleFromArraySchema(PayloadGenerator.java:274) at com.endava.cats.model.generator.PayloadGenerator.resolvePropertyToExample(PayloadGenerator.java:137) at com.endava.cats.model.generator.PayloadGenerator.parseFromInnerSchema(PayloadGenerator.java:364) at com.endava.cats.model.generator.PayloadGenerator.processSchemaProperties(PayloadGenerator.java:342) at com.endava.cats.model.generator.PayloadGenerator.resolveModelToExample(PayloadGenerator.java:318) at com.endava.cats.model.generator.PayloadGenerator.generate(PayloadGenerator.java:115) at com.endava.cats.factory.FuzzingDataFactory.generateSample(FuzzingDataFactory.java:307) at com.endava.cats.factory.FuzzingDataFactory.getResponsePayloads(FuzzingDataFactory.java:472) at com.endava.cats.factory.FuzzingDataFactory.getFuzzDataForHttpMethod(FuzzingDataFactory.java:187) at com.endava.cats.factory.FuzzingDataFactory.getFuzzDataForPost(FuzzingDataFactory.java:145) at com.endava.cats.factory.FuzzingDataFactory.fromPathItem(FuzzingDataFactory.java:76) at com.endava.cats.factory.FuzzingDataFactory_ClientProxy.fromPathItem(Unknown Source) at com.endava.cats.command.CatsCommand.fuzzPath(CatsCommand.java:198) at com.endava.cats.command.CatsCommand.startFuzzing(CatsCommand.java:137) at com.endava.cats.command.CatsCommand.doLogic(CatsCommand.java:121) at com.endava.cats.command.CatsCommand.run(CatsCommand.java:108) at picocli.CommandLine.executeUserObject(CommandLine.java:1939) at picocli.CommandLine.access$1300(CommandLine.java:145) at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358) at picocli.CommandLine$RunLast.handle(CommandLine.java:2352) at picocli.CommandLine$RunLast.handle(CommandLine.java:2314) at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) at picocli.CommandLine$RunLast.execute(CommandLine.java:2316) at picocli.CommandLine.execute(CommandLine.java:2078) at com.endava.cats.CatsMain.run(CatsMain.java:27) at com.endava.cats.CatsMain_ClientProxy.run(Unknown Source) at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:124) at io.quarkus.runtime.Quarkus.run(Quarkus.java:67) at io.quarkus.runtime.Quarkus.run(Quarkus.java:41) at io.quarkus.runner.GeneratedMain.main(Unknown Source)

swagger.zip

en-milie commented 2 years ago

Hi @jvert. Thank you for reporting this. Quite an interesting case of anyOf/oneOf without actually using it per se. Just curious, are the specs generated? Or more like contract-first?

Also, is this the expect request structure?


{
   "EditTime":"2022-06-15T17:18:48.688584+03:00",
   "ParentGroop":{
      "AvatarUrl":"http://example.com/aeiou",
      "Email":"roHWdcool.cats@cats.io",
      "Id":"De",
      "Name":"yM8E3zQ"
   },
   "SalesforceLinks":[
      {
         "IsEditable":true,
         "SelectedObjectId":"ZMWBR4E8pLeLOxdX3",
         "SalesforceType":"J4ORr0TO20ZwS98Obu",
         "Label":"sl",
         "FieldName":"uJmO4rdBqJd",
         "Name":"W27VVsIG"
      },
      {
         "IsEditable":true,
         "SelectedObjectId":"ZMWBR4E8pLeLOxdX3",
         "SalesforceType":"J4ORr0TO20ZwS98Obu",
         "Label":"sl",
         "FieldName":"uJmO4rdBqJd",
         "Name":"W27VVsIG"
      }
   ],
   "Pinned":true,
   "CanComment":true,
   "Creator":{
      "Email":"CWfiRcool.cats@cats.io",
      "AvatarUrl":"http://example.com/aeiou",
      "FriendlyName":"M9U",
      "SupportsChangePassword":true,
      "Id":"1iIvp"
   },
   "Timestamp":"2022-06-15T17:18:48.6885+03:00",
   "Flag":"CogZSkD1",
   "Components":[
      {
         "ComponentData_Id":6,
         "Model":{
            "Options":"Y1VrHZlr",
            "ComponentModel_Id":2,
            "Description":"y0xCf6TBoqy",
            "Multiple":true,
            "UserEditable":true,
            "DateOnly":true,
            "OptionsAssignmentId":"Zphb6zfowXfd5zteaHbPl",
            "Sequence":0,
            "OptionsComponentId":9,
            "HiddenFromMembers":true,
            "IsFlagField":true,
            "Type":9,
            "Required":true,
            "FormId":"co2EURrrj"
         },
         "Image": "aaaaaaaaa",
         "Width": 1024,
         "Height": 2048,
         "discriminator":"PictureData"
      },
      {
         "ComponentData_Id":6,
         "Model":{
            "Options":"Y1VrHZlr",
            "ComponentModel_Id":2,
            "Description":"y0xCf6TBoqy",
            "Multiple":true,
            "UserEditable":true,
            "DateOnly":true,
            "OptionsAssignmentId":"Zphb6zfowXfd5zteaHbPl",
            "Sequence":0,
            "OptionsComponentId":9,
            "HiddenFromMembers":true,
            "IsFlagField":true,
            "Type":9,
            "Required":true,
            "FormId":"co2EURrrj"
         },
         "Image": "aaaaaaaaa",
         "Width": 1024,
         "Height": 2048,
         "discriminator":"PictureData"
      }
   ],
   "Tagged":{
      "key":{
         "Email":"iRmsYcool.cats@cats.io",
         "AvatarUrl":"http://example.com/aeiou",
         "FriendlyName":"Rtg6AV",
         "SupportsChangePassword":true,
         "Id":"CHBkQq4qPr"
      }
   },
   "AssignmentId":"aMWgzO",
   "LikedByUser":true,
   "CommentCount":8,
   "Id":"iIJc",
   "LikeCount":8,
   "Editor":{
      "Email":"iRmsYcool.cats@cats.io",
      "AvatarUrl":"http://example.com/aeiou",
      "FriendlyName":"Rtg6AV",
      "SupportsChangePassword":true,
      "Id":"CHBkQq4qPr"
   }
}
jvert commented 2 years ago

It is generated by NSwag from an ASP.NET Core project.

en-milie commented 2 years ago

This should be fixed in the latest commit.

en-milie commented 1 year ago

This is now available in https://github.com/Endava/cats/releases/tag/cats-7.3.1