Open kjain14 opened 1 year ago
Hello, could you please provide the enhanced specification so I can check its integrity? Thank you
Hi, here is the enhanced spec:
{
"openapi": "3.1.0",
"info": {
"title": "REST countries API",
"description": "REST countries API",
"version": "v2.0.5"
},
"servers": [
{
"url": "http://localhost:9007"
}
],
"paths": {
"/v2/lang/{lang}": {
"get": {
"operationId": "v2Lang",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "lang",
"description": "Search by ISO 639-1 language code",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/lang/{lang}": {
"get": {
"operationId": "v3Lang",
"parameters": [
{
"name": "lang",
"description": "Search by language code or name",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/demonym/{demonym}": {
"get": {
"operationId": "v3Demonym",
"parameters": [
{
"name": "demonym",
"description": "Now you can search by how a citizen is called.",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/all": {
"get": {
"operationId": "v2All",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/translation/{translation}": {
"get": {
"operationId": "v3Translation",
"parameters": [
{
"name": "translation",
"description": "You can search by any translation name",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/subregion/{subregion}": {
"get": {
"operationId": "v3Subregion",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "subregion",
"description": "Search by Subregion: South America, Southern Europe, Central America, Eastern Asia, etc. The search can be using the full subregion’s name or just part of it",
"in": "path",
"example": "South America",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/callingcode/{callingcode}": {
"get": {
"operationId": "v2Callingcode",
"parameters": [
{
"name": "callingcode",
"description": "Search by calling code",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3.1/region/{region}": {
"get": {
"operationId": "v3Region",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "region",
"description": "Search by Region: Africa, Americas, Asia, Europe, Oceania. The search can be using the full region’s name or just part of it",
"in": "path",
"example": "Americas",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/name/{name}": {
"get": {
"operationId": "v3Name",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "name",
"description": "Search by country name. It can be the common or official value",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fullText",
"in": "query",
"schema": {
"type": "boolean"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/alpha": {
"get": {
"operationId": "v2Alphacodes",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"schema": {
"type": "array",
"items": {
"name": "codes",
"description": "Search by list of ISO 3166-1 2-letter or 3-letter country codes",
"in": "query",
"schema": {
"type": "string"
},
"required": true
}
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/regionalbloc/{regionalbloc}": {
"get": {
"operationId": "v2Regionalbloc",
"parameters": [
{
"name": "regionalbloc",
"description": "Search by regional bloc:\n - EU (European Union)\n - EFTA (European Free Trade Association)\n - CARICOM (Caribbean Community)\n - PA (Pacific Alliance)\n - AU (African Union)\n - USAN (Union of South American Nations)\n - EEU (Eurasian Economic Union)\n - AL (Arab League)\n - ASEAN (Association of Southeast Asian Nations)\n - CAIS (Central American Integration System)\n - CEFTA (Central European Free Trade Agreement)\n - NAFTA (North American Free Trade Agreement)\n - SAARC (South Asian Association for Regional Cooperation)\n",
"in": "path",
"example": "CEFTA",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/alpha": {
"get": {
"operationId": "v3Alphacodes",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"schema": {
"type": "array",
"items": {
"name": "codes",
"description": "Search by list of ISO 3166-1 2-letter or 3-letter country codes",
"in": "query",
"schema": {
"type": "string"
},
"required": true
}
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/capital/{capital}": {
"get": {
"operationId": "v3Capital",
"parameters": [
{
"name": "capital",
"description": "Search by capital city",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/alpha/{alphacode}": {
"get": {
"operationId": "v3Alphacode",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "alphacode",
"description": "Search by ISO 3166-1 2-letter or 3-letter country code",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/alpha/{alphacode}": {
"get": {
"operationId": "v2Alphacode",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "alphacode",
"description": "Search by ISO 3166-1 2-letter or 3-letter country code",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/all": {
"get": {
"operationId": "v3All",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/name/{name}": {
"get": {
"operationId": "v2Name",
"parameters": [
{
"name": "name",
"description": "Search by country name. It can be the native name or partial name",
"in": "path",
"schema": {
"type": "string"
},
"required": true
},
{
"name": "fullText",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/capital/{capital}": {
"get": {
"operationId": "v2Capital",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "capital",
"description": "Search by capital city",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v3/currency/{currency}": {
"get": {
"operationId": "v3Currency",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "currency",
"description": "Search by currency code or name",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/currency/{currency}": {
"get": {
"operationId": "v2Currency",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "currency",
"description": "Search by ISO 4217 currency code",
"in": "path",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
},
"/v2/region/{region}": {
"get": {
"operationId": "v2Region",
"parameters": [
{
"name": "fields",
"description": "You can filter the output of your request to include only the specified fields.",
"in": "query",
"schema": {
"type": "string"
}
},
{
"name": "region",
"description": "In version 2 regions are continent and subregions are region Search by continent: Africa, Americas, Asia, Europe, Oceania",
"in": "path",
"example": "Americas",
"schema": {
"type": "string"
},
"required": true
}
],
"responses": {},
"x-dependencies": []
}
}
}
}
Thank you for reporting the issues you've been experiencing in trying to replicate the artifact results on the enhanced specification. Your detailed feedback is greatly appreciated, and I've looked into the issues you've mentioned.
Regarding the Spotify API token issue, it seems that Spotify has recently changed the token access scope and overhauled their website, now providing REST API tokens with more limited access. We will engage with the Spotify team to see if there is a way to obtain "user access" scope so we can use the same access token as used in our paper.
As for the enhanced specification compatibility, we recently updated our enhanced specification version to 3.1.0 from 3.0.1, which appears to have generated some issues as certain tools do not support 3.1.0. To address this, I will provide a script to revert to 3.0.1 for the tools that are incompatible with the latest version.
Lastly, on the matter of the running REST API testing tool problem, we provided the testing tool running manual sourced from the developers. However, it seems more specific instructions are needed. I will add more detailed steps to use the tool. This should make it easier for users to utilize the tool.
Once all these issues have been addressed, I will respond to the issue. I appreciate your patience and cooperation as we work through these challenges.
A couple of other tweaks that would help with artifact:
Old line: "tmux new -d -s genome-nexus-server '. ./java8.env && java " + cov + "9002.exec" + " -jar ./services/genome-nexus/web/target/web-0-unknown-version-SNAPSHOT.war'"
New line: "tmux new -d -s genome-nexus-server '. ./java8.env && java " + cov + "9002.exec" + " -jar ./genome-nexus/web/target/web-0-unknown-version-SNAPSHOT.war'"
src/test/resources/testConf.yaml
should be included for RESTestWith those tweaks more of the fuzzers seem to be working.
Thank you for your suggestions, they're greatly appreciated. I've addressed each one as follows:
I've updated the setup.sh script to include the necessary wget command for fetching the required JaCoCo jars in the services directory.
I've revised the run_service.py to reflect the correct path in the genome-nexus line as you suggested.
Regarding your other points:
For generating testConf for RESTest, this process is outlined in our repository at "https://github.com/codingsoo/nlp2rest/tree/main/tools/restest". I agree that more detailed instructions would be beneficial, so I'll ensure that these are added soon.
Regarding the OMDB blocking issue, it's possible that the number of requests sent by the fuzzers exceeded their rate limit. I'll investigate this matter further.
Sorry one more question. I don't see a way to get coverage for all APIs, specifically ohsome, fdic, language-tool, and rest-countries. The reverse proxy points to actual APIs rather than local ones, so wondering how we would get coverage for those (or is coverage just averaged over the other 4 APIs)? I don't jacoco.agent.runtime setup for these APIs specifically.
Thanks for your question. Local APIs, like Language Tool, OCVN, Genome-Nexus, and YouTube-Mock services are easier to measure since they reside on our own servers. Thus, we can set up and use tools like Jacoco to track the code execution paths during tests and determine coverage.
On the other hand, for remote services, coverage measurement is more challenging because the code isn't local to our environment and therefore cannot be directly analyzed. These services are hosted on their respective servers and our tests can only interact with them through the provided endpoints.
Regarding the OMDB issue you raised before, we are indeed using the paid version to circumvent the request limit. This allows us to run more extensive tests against this API (https://www.patreon.com/join/omdb).
I hope this helps! Let me know if you have any other questions.
Hi, was trying to replicate the artifact results on the countries enhanced specification and was running into the following set of issues:
Services:
Error: java.lang.NullPointerException java.lang.NullPointerException at io.swagger.v3.parser.OpenAPIV3Parser.read(OpenAPIV3Parser.java:117) at io.swagger.v3.parser.OpenAPIV3Parser.read(OpenAPIV3Parser.java:105) at test.Load(test.java:19)
org.cornutum.tcases.openapi.reader.OpenApiReaderException: 2 conformance problem(s) found in Open API definition=file:/root/projects/nlp2rest/rule_validator/output/rest-countries-20230616193418850/enhanced_spec.json [0] attribute paths.'/v2/alpha'(get).parameters.[['unknown']].in is missing [1] attribute paths.'/v3/alpha'(get).parameters.[['unknown']].in is missing
java.lang.NullPointerException at io.resttestgen.core.openapi.Operation.(Operation.java:123)
at io.resttestgen.core.openapi.OpenAPIParser.parse(OpenAPIParser.java:116)
at io.resttestgen.core.Environment.setUp(Environment.java:57)
at io.resttestgen.core.cli.App.main(App.java:53)
Starting task Compile...
ERROR: Compiler failed. See logs in /root/projects/nlp2rest/tools/restler/Compile directory for more information.