Skip to content

Commit

Permalink
Merge 80b4353 into 404a738
Browse files Browse the repository at this point in the history
  • Loading branch information
akolod committed Apr 16, 2021
2 parents 404a738 + 80b4353 commit 6a0ebd2
Show file tree
Hide file tree
Showing 13 changed files with 393 additions and 38 deletions.
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ jobs:
include:
- stage: build with maven & generate reports
script:
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
- docker pull postgres:9.6.12
- mvn clean verify jacoco:report coveralls:report
- stage: build docker images for server and agent
if: NOT branch = master OR type IN (pull_request)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import io.restassured.RestAssured
import org.springframework.boot.web.server.LocalServerPort
import org.springframework.test.context.jdbc.Sql

import static com.hltech.judged.server.FileHelper.loadFromFileAndFormat

@FunctionalTest
class ContractsControllerFT extends PostgresDatabaseSpecification {

Expand All @@ -25,12 +27,12 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
"rest":{"value":"${capabilities.replace('"','\\"')}","mimeType":"application/json"}
},
"expectations":{
"test-provider":{"rest":{"value":"${expectations.replace('"','\\"')}","mimeType":"application/json"}}
"test-service":{"rest":{"value":"${expectations.replace('"','\\"')}","mimeType":"application/json"}}
}
}
""")
.when()
.post("/contracts/services/test-provider/versions/'1.0'")
.post("/contracts/services/test-service/versions/1.0")
.then()
.statusCode(200)
.contentType("application/json")
Expand All @@ -41,31 +43,31 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
capabilitiesFromResponse['mimeType'] == "application/json"
capabilitiesFromResponse['value'] == capabilities

def expectationsFromResponse = response['expectations']['test-provider']['rest']
def expectationsFromResponse = response['expectations']['test-service']['rest']
expectationsFromResponse['mimeType'] == "application/json"
expectationsFromResponse['value'] == expectations

and:
def capabilitiesFromDb = dbHelper.fetchCapabilities()
capabilitiesFromDb.size() == 1
capabilitiesFromDb[0]['service_name'] == 'test-provider'
capabilitiesFromDb[0]['service_version'] == "'1.0'"
capabilitiesFromDb[0]['service_name'] == 'test-service'
capabilitiesFromDb[0]['service_version'] == "1.0"
capabilitiesFromDb[0]['protocol'] == "rest"
capabilitiesFromDb[0]['mime_type'] == "application/json"
capabilitiesFromDb[0]['value'] == capabilities

def expectationsFromDb = dbHelper.fetchExpectations()
capabilitiesFromDb.size() == 1
expectationsFromDb[0]['service_name'] == 'test-provider'
expectationsFromDb[0]['service_version'] == "'1.0'"
expectationsFromDb[0]['service_name'] == 'test-service'
expectationsFromDb[0]['service_version'] == "1.0"
expectationsFromDb[0]['protocol'] == "rest"
expectationsFromDb[0]['mime_type'] == "application/json"
expectationsFromDb[0]['value'] == expectations

def serviceContractsFromDb = dbHelper.fetchServiceContracts()
serviceContractsFromDb.size() == 1
serviceContractsFromDb[0]['name'] == 'test-provider'
serviceContractsFromDb[0]['version'] == "'1.0'"
serviceContractsFromDb[0]['name'] == 'test-service'
serviceContractsFromDb[0]['version'] == "1.0"
}

@Sql('ContractsControllerFT.GeRegisteredContracts.sql')
Expand All @@ -79,20 +81,20 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.port(serverPort)
.contentType("application/json")
.when()
.get("/contracts/services/test-provider/versions/'1.0'")
.get("/contracts/services/test-service/versions/1.0")
.then()
.statusCode(200)
.contentType("application/json")
.extract().body().jsonPath().getMap('$')

then:
response['name'] == 'test-provider'
response['version'] == "'1.0'"
response['name'] == 'test-service'
response['version'] == "1.0"
def capabilitiesFromResponse = response['capabilities']['rest']
capabilitiesFromResponse['mimeType'] == "application/json"
capabilitiesFromResponse['value'] == capabilities

def expectationsFromResponse = response['expectations']['test-provider']['rest']
def expectationsFromResponse = response['expectations']['test-service']['rest']
expectationsFromResponse['mimeType'] == "application/json"
expectationsFromResponse['value'] == expectations
}
Expand All @@ -104,7 +106,7 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.port(serverPort)
.contentType("application/json")
.when()
.get("/contracts/services/test-provider/versions/'9.9'")
.get("/contracts/services/test-service/versions/'9.9")
.then()
.statusCode(404)
.contentType("application/json")
Expand All @@ -125,7 +127,7 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {

then:
contracts.size() == 4
contracts.containsAll(["test-provider", "test-provider2", "test-provider3", "test-provider4"])
contracts.containsAll(["test-service", "test-provider2", "test-provider3", "test-provider4"])

where:
path << ["/contracts", "/contracts/services"]
Expand All @@ -138,15 +140,15 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.port(serverPort)
.contentType("application/json")
.when()
.get("/contracts/services/test-provider/versions")
.get("/contracts/services/test-service/versions")
.then()
.statusCode(200)
.contentType("application/json")
.extract().body().jsonPath().getList('$')

then:
versions.size() == 4
versions.containsAll(["'1.0'", "'1.2'", "'2.0'", "'3.0'"])
versions.containsAll(["1.0", "1.2", "2.0", "3.0"])
}

@Sql('ContractsControllerFT.GetVersions.sql')
Expand Down Expand Up @@ -176,7 +178,7 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.port(serverPort)
.contentType("application/json")
.when()
.get("/contracts/services/test-provider/versions/'1.0'/capabilities/rest")
.get("/contracts/services/test-service/versions/1.0/capabilities/rest")
.then()
.statusCode(200)
.contentType("application/json")
Expand All @@ -193,7 +195,7 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.port(serverPort)
.contentType("application/json")
.when()
.get("/contracts/services/test-provider/versions/'1.0'/capabilities/jms")
.get("/contracts/services/test-service/versions/'1.0'/capabilities/jms")
.then()
.statusCode(404)
.contentType("application/json")
Expand All @@ -206,14 +208,14 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.port(serverPort)
.contentType("application/json")
.when()
.get("/contracts/services/test-provider")
.get("/contracts/services/test-service")
.then()
.statusCode(200)
.contentType("text/plain;charset=UTF-8")
.extract().body().asString()

then:
response == "test-provider"
response == "test-service"
}

@Sql('ContractsControllerFT.GeRegisteredServices.sql')
Expand All @@ -227,9 +229,4 @@ class ContractsControllerFT extends PostgresDatabaseSpecification {
.then()
.statusCode(404)
}

def loadFromFileAndFormat(String filePath) {
new File("src/test/resources/$filePath").text.replaceAll('\n','').replaceAll('\r','')
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import groovy.sql.Sql
import java.util.concurrent.TimeUnit
import static org.awaitility.Awaitility.await


class DbHelper {

static ALL_TABLE_NAMES = ['capabilities', 'databasechangelog', 'databasechangeloglock', 'environments',
Expand All @@ -29,6 +28,14 @@ class DbHelper {
sql.rows("select * from service_contracts" as String)
}

def fetchServiceVersions() {
sql.rows("select * from service_versions" as String)
}

def fetchEnvironments() {
sql.rows("select * from environments" as String)
}

def clearTables() {
ALL_TABLE_NAMES.each {tableName ->
await().atMost(10, TimeUnit.SECONDS).until({
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package com.hltech.judged.server

import io.restassured.RestAssured
import org.springframework.boot.web.server.LocalServerPort
import org.springframework.test.context.jdbc.Sql

@FunctionalTest
class EnvironmentControllerFT extends PostgresDatabaseSpecification {

@LocalServerPort
int serverPort

def "should update environment"() {
given:
def environmentName = 'TEST'

when:
RestAssured.given()
.port(serverPort)
.contentType("application/json")
.body("""[
{
"name": "test1",
"version": "1.0"
},
{
"name": "test2",
"version": "1.3"
}
]""")
.when()
.put("/environments/${environmentName}")
.then()
.statusCode(200)

then:
dbHelper.fetchEnvironments()[0]['name'] == environmentName
def serviceVersions = dbHelper.fetchServiceVersions()
serviceVersions.any {
it['name'] == 'test1' &&
it['version'] == "1.0" &&
it['environment_name'] == environmentName &&
it['space'] == 'default'
}
}

def "should update environment and replace namespace"() {
given:
def environmentName = 'TEST'
def space = 'testSpace'

when:
RestAssured.given()
.port(serverPort)
.contentType("application/json")
.header('X-JUDGE-D-AGENT-SPACE', space)
.body("""[
{
"name": "test-service-1",
"version": "1.0"
},
{
"name": "test-service-2",
"version": "1.3"
}
]""")
.when()
.put("/environments/${environmentName}")
.then()
.statusCode(200)

then:
dbHelper.fetchEnvironments()[0]['name'] == environmentName
def serviceVersions = dbHelper.fetchServiceVersions()
serviceVersions.any {
it['name'] == 'test-service-1' &&
it['version'] == "1.0" &&
it['environment_name'] == environmentName &&
it['space'] == space
}
serviceVersions.any {
it['name'] == 'test-service-2' &&
it['version'] == "1.3" &&
it['environment_name'] == environmentName &&
it['space'] == space
}
}

@Sql("EnvironmentControllerFT.sql")
def "should get all environments"() {
when:
def response = RestAssured.given()
.port(serverPort)
.contentType("application/json")
.when()
.get("/environments")
.then()
.statusCode(200)
.contentType("application/json")
.extract().body().jsonPath().getList('$')

then:
response.containsAll("TEST1", "TEST2")
}

def "should return empty list if there are no environments"() {
when:
def response = RestAssured.given()
.port(serverPort)
.contentType("application/json")
.when()
.get("/environments")
.then()
.statusCode(200)
.contentType("application/json")
.extract().body().jsonPath().getList('$')

then:
response.size() == 0
}

@Sql("EnvironmentControllerFT.sql")
def "should get service names and versions for selected environment"() {
given:
def environmentName = 'TEST1'
when:
def response = RestAssured.given()
.port(serverPort)
.contentType("application/json")
.when()
.get("/environments/${environmentName}")
.then()
.statusCode(200)
.contentType("application/json")
.extract().body().jsonPath().getList('$')

then:
response.any{
it['name'] == "test-service-1" &&
it['version'] == "1.0"
}
response.any{
it['name'] == "test-service-2" &&
it['version'] == "2.0"
}
}

@Sql("EnvironmentControllerFT.sql")
def "should return empty list when there are no services for selected environment"() {
when:
def response = RestAssured.given()
.port(serverPort)
.contentType("application/json")
.when()
.get("/environments/TEST3")
.then()
.statusCode(200)
.contentType("application/json")
.extract().body().jsonPath().getList('$')

then:
response.size() == 0
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.hltech.judged.server

class FileHelper {

static loadFromFileAndFormat(String filePath) {
new File("src/test/resources/$filePath").text.replaceAll('\n','').replaceAll('\r','')
}
}
Loading

0 comments on commit 6a0ebd2

Please sign in to comment.