Updated RT and Xray default versions. Removed obsolete pipeline tests.

This commit is contained in:
Jeff Fry
2020-10-25 21:21:08 -07:00
parent 8d03703e9b
commit c4ff47cc5e
8 changed files with 4 additions and 1587 deletions

View File

@@ -4,7 +4,7 @@
ansible_marketplace: standalone
# The version of Artifactory to install
artifactory_version: 7.7.8
artifactory_version: 7.10.2
# licenses file - specify a licenses file or specify up to 5 licenses
artifactory_license1:

View File

@@ -4,7 +4,7 @@
ansible_marketplace: standalone
# The version of xray to install
xray_version: 3.8.6
xray_version: 3.10.3
# whether to enable HA
xray_ha_enabled: true

View File

@@ -1,196 +0,0 @@
package steps
import org.testng.annotations.DataProvider
import static io.restassured.RestAssured.given
class SecuritytSteps {
def createUser(usernameRt, emailRt, passwordRt) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"email\" : \"${emailRt}\",\n" +
" \"password\": \"${passwordRt}\"\n" +
"}")
.when()
.put("/api/security/users/${usernameRt}")
.then()
.extract().response()
}
def getUserDetails(usernameRt) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/api/security/users/${usernameRt}")
.then()
.extract().response()
}
def deleteUser(usernameRt) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.delete("/api/security/users/${usernameRt}")
.then()
.extract().response()
}
def generateAPIKey(usernameRt, passwordRt) {
return given()
.auth()
.preemptive()
.basic("${usernameRt}", "${passwordRt}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.post("/api/security/apiKey")
.then()
.extract().response()
}
def getAPIKey(usernameRt, passwordRt) {
return given()
.auth()
.preemptive()
.basic("${usernameRt}", "${passwordRt}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/api/security/apiKey")
.then()
.extract().response()
}
def regenerateAPIKey(usernameRt, passwordRt) {
return given()
.auth()
.preemptive()
.basic("${usernameRt}", "${passwordRt}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.put("/api/security/apiKey")
.then()
.extract().response()
}
def createGroup(groupName) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\"name\": \"${groupName}\"}")
.when()
.put("/api/security/groups/${groupName}")
.then()
.extract().response()
}
def getGroup(groupName) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\"name\": \"${groupName}\"}")
.when()
.get("/api/security/groups/${groupName}")
.then()
.extract().response()
}
def deleteGroup(groupName) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.delete("/api/security/groups/${groupName}")
.then()
.extract().response()
}
def createPermissions(permissionName, repository, user1, user2,
group1, group2, action1, action2, action3) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"name\": \"${permissionName}\",\n" +
" \"repo\": {\n" +
" \"repositories\": [ \"${repository}\" ],\n" +
" \"actions\": {\n" +
" \"users\" : {\n" +
" \"${user1}\": [ \"${action1}\",\"${action2}\",\"${action3}\" ], \n" +
" \"${user2}\" : [ \"${action1}\",\"${action2}\",\"${action3}\" ]\n" +
" },\n" +
" \"groups\" : {\n" +
" \"${group1}\" : [ \"${action1}\",\"${action2}\",\"${action3}\" ],\n" +
" \"${group2}\" : [ \"${action1}\",\"${action2}\" ]\n" +
" }\n" +
" }\n" +
" }\n" +
"}")
.when()
.put("/api/v2/security/permissions/testPermission")
.then()
.extract().response()
}
def getPermissions( permissionName) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/api/v2/security/permissions/${permissionName}")
.then()
.extract().response()
}
def deletePermissions(permissionName) {
return given()
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.delete("/api/v2/security/permissions/${permissionName}")
.then()
.extract().response()
}
// Data providers
@DataProvider(name="users")
public Object[][] users() {
return new Object[][]{
["testuser0", "email0@jfrog.com", "password123"],
["testuser1", "email1@jfrog.com", "password123"],
["testuser2", "email2@jfrog.com", "password123"],
["testuser3", "email3@jfrog.com", "password123"],
["testuser4", "email4@jfrog.com", "password123"],
["testuser5", "email5@jfrog.com", "password123"],
["testuser6", "email6@jfrog.com", "password123"],
["testuser7", "email7@jfrog.com", "password123"],
["testuser8", "email8@jfrog.com", "password123"],
["testuser9", "email9@jfrog.com", "password123"]
}
}
@DataProvider(name="groups")
public Object[][] groups() {
return new Object[][]{
["test-group-0"],
["test-group-1"],
["test-group-2"],
["test-group-3"],
["test-group-4"],
["test-group-5"],
["test-group-6"],
["test-group-7"],
["test-group-8"],
["test-group-9"]
}
}
}

View File

@@ -1,585 +0,0 @@
package steps
import org.testng.annotations.DataProvider
import static io.restassured.RestAssured.given
class XraySteps {
def createIssueEvent(issueID, cve, summary, description, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"id\": \"${issueID}\",\n" +
" \"type\": \"Security\",\n" +
" \"provider\": \"JFrog\",\n" +
" \"package_type\": \"maven\",\n" +
" \"severity\": \"High\",\n" +
" \"components\": [\n" +
" {\n" +
" \"id\": \"aero:aero\",\n" +
" \"vulnerable_versions\": [\n" +
" \"[0.2.3]\"\n" +
" ]\n" +
" }\n" +
" ],\n" +
" \"cves\": [\n" +
" {\n" +
" \"cve\": \"${cve}\",\n" +
" \"cvss_v2\": \"2.4\"\n" +
" }\n" +
" ],\n" +
" \"summary\": \"${summary}\",\n" +
" \"description\": \"${description}\",\n" +
" \"sources\": [\n" +
" {\n" +
" \"source_id\": \"${cve}\"\n" +
" }\n" +
" ]\n" +
"}")
.when()
.post("/v1/events")
.then()
.extract().response()
}
def updateIssueEvent(issueID, cve, summary, description, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"type\": \"Security\",\n" +
" \"provider\": \"JFrog\",\n" +
" \"package_type\": \"maven\",\n" +
" \"severity\": \"High\",\n" +
" \"components\": [\n" +
" {\n" +
" \"id\": \"aero:aero\",\n" +
" \"vulnerable_versions\": [\n" +
" \"[0.2.3]\"\n" +
" ]\n" +
" }\n" +
" ],\n" +
" \"cves\": [\n" +
" {\n" +
" \"cve\": \"${cve}\",\n" +
" \"cvss_v2\": \"2.4\"\n" +
" }\n" +
" ],\n" +
" \"summary\": \"${summary}\",\n" +
" \"description\": \"${description}\",\n" +
" \"sources\": [\n" +
" {\n" +
" \"source_id\": \"${cve}\"\n" +
" }\n" +
" ]\n" +
"}")
.when()
.put("/v1/events/${issueID}")
.then()
.extract().response()
}
def createPolicy(policyName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"name\": \"${policyName}\",\n" +
" \"type\": \"security\",\n" +
" \"description\": \"some description\",\n" +
" \"rules\": [\n" +
" {\n" +
" \"name\": \"securityRule\",\n" +
" \"priority\": 1,\n" +
" \"criteria\": {\n" +
" \"min_severity\": \"High\"\n" +
" },\n" +
" \"actions\": {\n" +
" \"mails\": [\n" +
" \"mail1@example.com\",\n" +
" \"mail2@example.com\"\n" +
" ],\n" +
" \"fail_build\": true,\n" +
" \"block_download\": {\n" +
" \"unscanned\": true,\n" +
" \"active\": true\n" +
" }\n" +
" }\n" +
" }\n" +
" ]\n" +
"}")
.when()
.post("/v1/policies")
.then()
.extract().response()
}
def updatePolicy(policyName, description, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"name\": \"${policyName}\",\n" +
" \"type\": \"security\",\n" +
" \"description\": \"${description}\",\n" +
" \"rules\": [\n" +
" {\n" +
" \"name\": \"securityRule\",\n" +
" \"priority\": 1,\n" +
" \"criteria\": {\n" +
" \"min_severity\": \"High\"\n" +
" },\n" +
" \"actions\": {\n" +
" \"mails\": [\n" +
" \"mail1@example.com\",\n" +
" \"mail2@example.com\"\n" +
" ],\n" +
" \"fail_build\": true,\n" +
" \"block_download\": {\n" +
" \"unscanned\": true,\n" +
" \"active\": true\n" +
" }\n" +
" }\n" +
" }\n" +
" ]\n" +
"}")
.when()
.put("/v1/policies/${policyName}")
.then()
.extract().response()
}
def getPolicy(policyName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/policies/${policyName}")
.then()
.extract().response()
}
def getPolicies(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/policies")
.then()
.extract().response()
}
def deletePolicy(policyName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.delete("/v1/policies/${policyName}")
.then()
.extract().response()
}
def getIssueEvent(issueID, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/events/${issueID}")
.then()
.extract().response()
}
def createWatchEvent(watchName, policyName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"general_data\": {\n" +
" \"name\": \"${watchName}\",\n" +
" \"description\": \"This is a new watch created using API V2\",\n" +
" \"active\": true\n" +
" },\n" +
" \"project_resources\": {\n" +
" \"resources\": [\n" +
" {\n" +
" \"type\": \"all-repos\",\n" +
" \"filters\": [\n" +
" {\n" +
" \"type\": \"package-type\",\n" +
" \"value\": \"Docker\"\n" +
" },\n" +
" {\n" +
" \"type\": \"package-type\",\n" +
" \"value\": \"Debian\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
" },\n" +
" \"assigned_policies\": [\n" +
" {\n" +
" \"name\": \"${policyName}\",\n" +
" \"type\": \"security\"\n" +
" }\n" +
" ]\n" +
"}")
.when()
.post("/v2/watches")
.then()
.extract().response()
}
def updateWatchEvent(watchName, description, policyName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"general_data\": {\n" +
" \"name\": \"${watchName}\",\n" +
" \"description\": \"${description}\",\n" +
" \"active\": true\n" +
" },\n" +
" \"project_resources\": {\n" +
" \"resources\": [\n" +
" {\n" +
" \"type\": \"all-repos\",\n" +
" \"filters\": [\n" +
" {\n" +
" \"type\": \"package-type\",\n" +
" \"value\": \"Docker\"\n" +
" },\n" +
" {\n" +
" \"type\": \"package-type\",\n" +
" \"value\": \"Debian\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
" },\n" +
" \"assigned_policies\": [\n" +
" {\n" +
" \"name\": \"${policyName}\",\n" +
" \"type\": \"security\"\n" +
" }\n" +
" ]\n" +
"}")
.when()
.put("/v2/watches/${watchName}")
.then()
.extract().response()
}
def getWatchEvent(watchName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v2/watches/${watchName}")
.then()
.extract().response()
}
def deleteWatchEvent(watchName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.delete("/v2/watches/${watchName}")
.then()
.extract().response()
}
def assignPolicy(watchName, policyName, username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"watches\": [\n" +
" \"${watchName}\"\n" +
" ]\n" +
"}")
.when()
.post("/v1/policies/${policyName}/assign")
.then()
.extract().response()
}
def getIntegrationConfiguration(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/integration")
.then()
.extract().response()
}
def addtIntegrationConfiguration(username, password, vendorName) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"vendor\": \"${vendorName}\",\n" +
" \"api_key\": \"12345\",\n" +
" \"enabled\": true,\n" +
" \"context\": \"project_id\",\n" +
" \"url\": \"https://saas.whitesourcesoftware.com/xray\",\n" +
" \"description\": \"WhiteSource provides a simple yet powerful open source security and licenses management solution. More details at http://www.whitesourcesoftware.com.\",\n" +
" \"test_url\": \"https://saas.whitesourcesoftware.com/xray/api/checkauth\"\n" +
"}")
.when()
.post("/v1/integration")
.then()
.extract().response()
}
def postSystemParameters(username, password, body) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body(body)
.when()
.put("/v1/configuration/systemParameters")
.then()
.extract().response()
}
def getSystemParameters(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/configuration/systemParameters")
.then()
.extract().response()
}
def getBinaryManager(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/binMgr/default")
.then()
.extract().response()
}
def getIndexingConfiguration(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.when()
.get("/v1/binMgr/default/repos")
.then()
.extract().response()
}
def updateIndexingConfiguration(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"indexed_repos\": [\n" +
" {\n" +
" \"name\": \"docker-local\",\n" +
" \"type\": \"local\",\n" +
" \"pkg_type\": \"Docker\"\n" +
" },\n" +
" {\n" +
" \"name\": \"generic-dev-local\",\n" +
" \"type\": \"local\",\n" +
" \"pkg_type\": \"Generic\"\n" +
" }\n" +
" ],\n" +
" \"non_indexed_repos\": []\n" +
"}")
.when()
.put("/v1/binMgr/default/repos")
.then()
.extract().response()
}
def startScan(username, password, componentID) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("Content-Type", "application/json")
.body("{\n" +
" \"componentID\": \"${componentID}\"\n" +
"}")
.when()
.post("/v1/scanArtifact")
.then()
.extract().response()
}
def artifactSummary(username, password, artifactPath) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("content-Type", "application/json")
.body("{\n" +
" \"checksums\": [\n" +
" \"\"\n" +
" ],\n" +
" \"paths\": [\n" +
" \"${artifactPath}\"\n" +
" ]\n" +
"}")
.when()
.post("/v1/summary/artifact")
.then()
.extract().response()
}
def createSupportBundle(username, password, name, startDate, endDate) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("Content-Type", "application/json")
.body("{ \n" +
" \"name\":\"${name}\",\n" +
" \"description\":\"desc\",\n" +
" \"parameters\":{ \n" +
" \"configuration\": true,\n" +
" \"system\": true, \n" +
" \"logs\":{ \n" +
" \"include\": true, \n" +
" \"start_date\":\"${startDate}\",\n" +
" \"end_date\":\"${endDate}\"\n" +
" },\n" +
" \"thread_dump\":{ \n" +
" \"count\": 1,\n" +
" \"interval\": 0\n" +
" }\n" +
" }\n" +
"}")
.when()
.post("/v1/system/support/bundle")
.then()
.extract().response()
}
def getSystemMonitoringStatus(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("Content-Type", "application/json")
.when()
.get("/v1/monitor")
.then()
.extract().response()
}
def xrayPingRequest(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("Content-Type", "application/json")
.when()
.get("/v1/system/ping")
.then()
.extract().response()
}
def xrayGetVersion(username, password) {
return given()
.auth()
.preemptive()
.basic("${username}", "${password}")
.header("Cache-Control", "no-cache")
.header("Content-Type", "application/json")
.when()
.get("/v1/system/version")
.then()
.extract().response()
}
// Data providers
@DataProvider(name = "issueEvents")
public Object[][] issueEvents() {
return new Object[][]{
["XRAY-", "CVE-2017-2000386", "A very important custom issue", "A very important custom issue"]
}
}
}

View File

@@ -7,19 +7,4 @@
<class name="tests.HealthCheckTest"/>
</classes>
</test>
<test name="tests.RepositoryTest">
<classes>
<class name="tests.RepositoryTest"/>
</classes>
</test>
<test name="tests.SecurityTest">
<classes>
<class name="tests.SecurityTest"/>
</classes>
</test>
<test name="tests.XrayTest">
<classes>
<class name="tests.XrayTest"/>
</classes>
</test>
</suite>

View File

@@ -1,302 +0,0 @@
package tests
import io.restassured.RestAssured
import io.restassured.path.json.JsonPath
import io.restassured.response.Response
import org.hamcrest.Matchers
import org.testng.Reporter
import org.testng.annotations.BeforeTest
import org.testng.annotations.Test
import org.yaml.snakeyaml.Yaml
import steps.RepositorySteps
import java.time.LocalDate
import static org.hamcrest.Matchers.containsString
import static org.hamcrest.Matchers.containsStringIgnoringCase
import static org.hamcrest.Matchers.equalTo
import static org.hamcrest.Matchers.equalToIgnoringCase
import static org.hamcrest.Matchers.greaterThanOrEqualTo
class RepositoryTest extends RepositorySteps{
Yaml yaml = new Yaml()
def configFile = new File("./src/test/resources/testenv.yaml")
def repoListHA = new File("./src/test/resources/repositories/CreateDefault.yaml")
def repoListJCR = new File("./src/test/resources/repositories/CreateJCR.yaml")
def artifact = new File("./src/test/resources/repositories/artifact.zip")
def config = yaml.load(configFile.text)
def artifactoryURL
def username
def password
@BeforeTest(groups=["jcr", "pro"])
def setUp() {
artifactoryURL = config.artifactory.external_ip
username = config.artifactory.rt_username
password = config.artifactory.rt_password
RestAssured.baseURI = "http://${artifactoryURL}/artifactory"
RestAssured.authentication = RestAssured.basic(username, password);
RestAssured.useRelaxedHTTPSValidation();
}
@Test(priority=1, groups=["pro"], testName = "Delete sample repositories")
void deleteReposTest(){
Response getRepoResponse = getRepos()
JsonPath jsonPathEvaluator = getRepoResponse.jsonPath()
List<String> repoNames = jsonPathEvaluator.getList("key", String.class)
for (int i = 0; i < repoNames.size(); i ++){
Response delete = deleteRepository(repoNames[i], username, password)
delete.then().statusCode(200)
}
Reporter.log("- Delete sample HA repositories. All repositories were successfully deleted", true)
}
@Test(priority=1, groups=["jcr",], testName = "Delete sample repositories JCR")
void deleteDefaultJCRReposTest(){
Response getRepoResponse = getRepos()
JsonPath jsonPathEvaluator = getRepoResponse.jsonPath()
List<String> repoNames = jsonPathEvaluator.getList("key", String.class)
for (int i = 0; i < repoNames.size(); i ++){
Response delete = deleteRepository(repoNames[i], username, password)
delete.then().statusCode(400).body("errors[0].message",
containsStringIgnoringCase("This REST API is available only in Artifactory Pro"))
}
Reporter.log("- Delete sample JCR repositories. " +
"Verified - this REST API is available only in Artifactory Pro", true)
}
@Test(priority=2, groups=["pro"], testName = "Create a list of repositories for HA, specified in YAML file")
void createDefaultHAReposTest(){
def body
def expectedMessage
body = repoListHA
expectedMessage = "383 changes to config merged successfully"
Response response = createRepositories(body, username, password)
response.then().assertThat().statusCode(200)
.body(Matchers.hasToString(expectedMessage))
.log().body()
Reporter.log("- Create repositories for HA distribution. Successfully created", true)
}
@Test(priority=2, groups=["jcr"], testName = "Create a list of repositories for JCR, specified in YAML file")
void createDefaultJCRReposTest(){
def body
def expectedMessage
body = repoListJCR
expectedMessage = "82 changes to config merged successfully"
Response response = createRepositories(body, username, password)
response.then().assertThat().statusCode(200)
.body(Matchers.hasToString(expectedMessage))
.log().body()
Reporter.log("- Create repositories for JCR. Successfully created", true)
}
@Test(priority=3, groups=["pro"], testName = "Verify HA repositories were created successfully")
void checkDefaultHAReposTest(){
Response response = getRepos()
def numberOfRepos = response.then().extract().path("size()")
def expectedReposNumber = 84
println("Number of created repositories is ${numberOfRepos}")
response.then().assertThat().statusCode(200)
.body("size()", greaterThanOrEqualTo(expectedReposNumber))
Reporter.log("- Verify HA repos were created. ${numberOfRepos} repositories were created", true)
}
@Test(priority=3, groups=["jcr"], testName = "Verify JCR repositories were created successfully")
void checkDefaultJCRReposTest(){
Response response = getRepos()
def numberOfRepos = response.then().extract().path("size()")
def expectedReposNumber = 17
response.then().assertThat().statusCode(200)
.body("size()", greaterThanOrEqualTo(expectedReposNumber))
Reporter.log("- Verify JCR repos were created. ${numberOfRepos} repositories were created", true)
}
/*@Test(priority=4, groups=["jcr","pro"], testName = "Create a directory in generic repo")
void createDirectoryTest(){
def repoName = "generic-dev-local"
def directoryName = "test-directory/"
Response response = createDirectory(repoName, directoryName)
response.then().assertThat().statusCode(201)
.body("repo", equalTo(repoName))
.body("path", equalTo("/" + directoryName))
.body("uri", equalTo("http://" + artifactoryURL + ":80/artifactory/" + repoName + "/" + directoryName))
Reporter.log("- Create folder. Folder successfully created", true)
}
@Test(priority=5, groups=["jcr","pro"], testName = "Deploy file to generic repo")
void deployArtifactToGenericTest(){
def repoName = "generic-dev-local"
def directoryName = "test-directory"
def filename = "artifact.zip"
Response response = deployArtifact(repoName, directoryName, artifact, filename)
response.then().assertThat().statusCode(201)
.body("repo", equalTo(repoName))
.body("path", equalTo("/" + directoryName + "/" + filename))
.body("downloadUri", equalTo("http://" + artifactoryURL + ":80/artifactory/" + repoName + "/"
+ directoryName + "/" + filename))
Reporter.log("- Deploy artifact. Artifact successfully deployed", true)
}
@Test(priority=6, groups=["jcr", "pro"], testName = "Get the artifact info")
void getArtifactinfoTest(){
def repoName = "generic-dev-local"
def directoryName = "test-directory"
def filename = "artifact.zip"
Response response = getInfo(repoName, directoryName, artifact, filename)
response.then().assertThat().statusCode(200)
.body("repo", equalTo(repoName))
.body("path", equalTo("/" + directoryName + "/" + filename))
.body("downloadUri", equalTo("http://" + artifactoryURL + ":80/artifactory/" + repoName + "/"
+ directoryName + "/" + filename))
Reporter.log("- Get the artifact info. Artifact info is successfully returned", true)
}*/
/* @Test(priority=7, groups=["jcr", "pro"], testName = "Delete item")
void deleteJCRItemTest(){
def repoName = "generic-dev-local"
def directoryName = "test-directory"
def filename = "artifact.zip"
Response response = deleteItem(repoName, directoryName, artifact, filename)
response.then().assertThat().statusCode(204)
Response verification = getInfo(repoName, directoryName, artifact, filename)
verification.then().statusCode(404)
.body("errors[0].message", equalToIgnoringCase("Unable to find item"))
Reporter.log("- Delete item. File has been deleted successfully", true)
}*/
/*@Test(priority=8, groups=["pro"], testName = "Create support bundle")
void createSupportBundleHATest(){
def name = "Support Bundle"
LocalDate startDate = LocalDate.now().minusDays(5)
LocalDate endDate = LocalDate.now()
Response response = createSupportBundle(name, startDate, endDate)
response.then().assertThat().statusCode(200)
.body("artifactory.bundle_url", containsString(artifactoryURL))
Reporter.log("- Create support bundle. Successfully created", true)
}*/
@Test(priority=8, groups=["jcr"], testName = "Create support bundle")
void createSupportBundleJCATest(){
def name = "Support Bundle"
LocalDate startDate = LocalDate.now().minusDays(5)
LocalDate endDate = LocalDate.now()
Response response = createSupportBundle(name, startDate, endDate)
response.then().assertThat().statusCode(400)
.body("errors[0].message",
containsStringIgnoringCase("This REST API is available only in Artifactory Pro"))
Reporter.log("- Create support bundle, JCR. " +
"Call is not supported in JCR version, error message is correct", true)
}
@Test(priority=9, groups=["pro"], testName = "Delete created repositories")
void deleteDefaultReposTest(){
Response getRepoResponse = getRepos()
JsonPath jsonPathEvaluator = getRepoResponse.jsonPath()
List<String> repoNames = jsonPathEvaluator.getList("key", String.class)
for (int i = 0; i < repoNames.size(); i ++){
Response delete = deleteRepository(repoNames[i], username, password)
delete.then().statusCode(200)
}
Reporter.log("- Delete HA repositories. All repositories were successfully deleted", true)
}
@Test(priority=9, groups=["jcr",], testName = "Delete sample repositories JCR")
void deleteJCRReposTest(){
Response getRepoResponse = getRepos()
JsonPath jsonPathEvaluator = getRepoResponse.jsonPath()
List<String> repoNames = jsonPathEvaluator.getList("key", String.class)
for (int i = 0; i < repoNames.size(); i ++){
Response delete = deleteRepository(repoNames[i], username, password)
delete.then().statusCode(400).body("errors[0].message",
containsStringIgnoringCase("This REST API is available only in Artifactory Pro"))
}
Reporter.log("- Delete sample JCR repositories. All repositories were successfully deleted", true)
}
@Test(priority=10, groups=["pro"], testName = "Verify repositories were deleted successfully")
void checkReposAreDeleted(){
Response response = getRepos()
def numberOfRepos = response.then().extract().path("size()")
def expectedReposNumber = 0
response.then().assertThat().statusCode(200)
.body("size()", equalTo(expectedReposNumber))
Reporter.log("- Verify repo were deleted. ${numberOfRepos} repositories remain", true)
}
@Test(priority=11, groups=["pro"], testName = "Re-Create a list of repositories, for the next tests")
void reCreateDefaultHAReposTest(){
def body
def expectedMessage
body = repoListHA
expectedMessage = "383 changes to config merged successfully"
Response response = createRepositories(body, username, password)
response.then().assertThat().statusCode(200)
.body(Matchers.hasToString(expectedMessage))
.log().body()
Reporter.log("- Re-create repositories for HA distribution. Successfully created", true)
}
@Test(priority=12, groups=["jcr"], testName = "Re-Create a list of repositories, for the next tests")
void reCreateDefaultJCRReposTest(){
def body
def expectedMessage
body = repoListJCR
expectedMessage = "82 changes to config merged successfully"
Response response = createRepositories(body, username, password)
response.then().assertThat().statusCode(200)
.body(Matchers.hasToString(expectedMessage))
.log().body()
Reporter.log("- Re-create repositories for JCR distribution. Successfully created", true)
}
/* @Test(priority=13, groups=["jcr","pro"], testName = "Create a directory in generic repo")
void reCreateDirectoryTest(){
def repoName = "generic-dev-local"
def directoryName = "test-directory/"
Response response = createDirectory(repoName, directoryName)
response.then().assertThat().statusCode(201)
.body("repo", equalTo(repoName))
.body("path", equalTo("/" + directoryName))
.body("uri", equalTo("http://" + artifactoryURL + ":80/artifactory/" + repoName + "/" + directoryName))
Reporter.log("- Create folder. Folder successfully created", true)
}*/
/* @Test(priority=14, groups=["jcr","pro"], testName = "Deploy file to generic repo")
void reDeployArtifactToGenericTest(){
def repoName = "generic-dev-local"
def directoryName = "test-directory"
def filename = "artifact.zip"
Response response = deployArtifact(repoName, directoryName, artifact, filename)
response.then().assertThat().statusCode(201)
.body("repo", equalTo(repoName))
.body("path", equalTo("/" + directoryName + "/" + filename))
.body("downloadUri", equalTo("http://" + artifactoryURL + ":80/artifactory/" + repoName + "/"
+ directoryName + "/" + filename))
Reporter.log("- Deploy artifact. Artifact successfully deployed", true)
}*/
}

View File

@@ -1,153 +0,0 @@
package tests
import io.restassured.RestAssured
import io.restassured.response.Response
import org.hamcrest.Matchers
import org.junit.Assert
import org.testng.Reporter
import org.testng.annotations.BeforeSuite
import org.testng.annotations.Test
import org.yaml.snakeyaml.Yaml
import steps.SecuritytSteps
class SecurityTest extends SecuritytSteps{
Yaml yaml = new Yaml()
def configFile = new File("./src/test/resources/testenv.yaml")
def config = yaml.load(configFile.text)
def artifactoryURL
def distribution
def username
def password
@BeforeSuite(groups=["jcr","pro"])
def setUp() {
artifactoryURL = config.artifactory.external_ip
distribution = config.artifactory.distribution
username = config.artifactory.rt_username
password = config.artifactory.rt_password
RestAssured.baseURI = "http://${artifactoryURL}/artifactory"
RestAssured.authentication = RestAssured.basic(username, password);
RestAssured.useRelaxedHTTPSValidation();
}
@Test(priority=1, groups=["pro"], dataProvider = "users", testName = "Create users")
void createUsersTest(usernameRt, emailRt, passwordRt){
Response response = createUser(usernameRt, emailRt, passwordRt)
response.then().statusCode(201)
Reporter.log("- Create users. User ${usernameRt} created successfully", true)
}
@Test(priority=2, groups=["pro"], dataProvider = "users", testName = "Verify users were created successfully")
void verifyUsersTest(usernameRt, emailRt, passwordRt){
Response response = getUserDetails(usernameRt)
response.then().statusCode(200).
body("name", Matchers.equalTo(usernameRt)).
body("email", Matchers.equalTo(emailRt)).
body("admin", Matchers.equalTo(false)).
body("groups[0]", Matchers.equalTo("readers"))
Reporter.log("- Verify created users. User ${usernameRt} was successfully verified", true)
}
@Test(priority=3, groups=["pro"], dataProvider = "users", testName = "Generate API keys")
void generateAPIKeysTest(usernameRt, emailRt, passwordRt) {
Response createKey = generateAPIKey(usernameRt, passwordRt)
def errorMessage = createKey.then().extract().path("error")
if (errorMessage == null) {
def key = createKey.then().extract().path("apiKey")
Response getKey = getAPIKey(usernameRt, passwordRt)
def keyVerification = getKey.then().extract().path("apiKey")
Assert.assertTrue(key == keyVerification)
Reporter.log("- Generate API keys. Key for ${usernameRt} created successfully", true)
} else if (errorMessage.toString().contains("Api key already exists for user:")){
Reporter.log("- Generate API keys. Key for ${usernameRt} already exists, skipped", true)
}
}
@Test(priority=4, groups=["pro"], dataProvider = "users", testName = "Re-generate API keys")
void regenerateAPIKeysTest(usernameRt, emailRt, passwordRt){
Response regenerated = regenerateAPIKey(usernameRt, passwordRt)
regenerated.then().statusCode(200)
def key = regenerated.then().extract().path("apiKey")
Response getKey = getAPIKey(usernameRt, passwordRt)
getKey.then().statusCode(200)
def keyVerification = getKey.then().extract().path("apiKey")
Assert.assertTrue(key == keyVerification)
Reporter.log("- Re-generate API keys. Key for ${usernameRt} re-generated successfully", true)
}
@Test(priority=5, groups=["pro"], dataProvider = "groups", testName = "Create a group")
void createGroupTest(groupName){
Response create = createGroup(groupName)
create.then().statusCode(201)
Response get = getGroup(groupName)
get.then().statusCode(200)
def name = get.then().extract().path("name")
def adminPrivileges = get.then().extract().path("adminPrivileges")
Assert.assertTrue(name == groupName)
Assert.assertTrue(adminPrivileges == false)
Reporter.log("- Create group. Group ${groupName} was successfully created", true)
}
@Test(priority=6, groups=["pro"], testName = "Create and verify permissions")
void createPermissionsTest(){
def permissionName = "testPermission"
def repository = "ANY"
def user1 = "testuser0"
def user2 = "testuser1"
def group1 = "test-group-0"
def group2 = "test-group-1"
def action1 = "read"
def action2 = "write"
def action3 = "manage"
Response create = createPermissions(permissionName, repository, user1, user2,
group1, group2, action1, action2, action3)
create.then().statusCode(200)
Response get = getPermissions(permissionName)
get.then().statusCode(200)
Assert.assertTrue(permissionName == get.then().extract().path("name"))
Assert.assertTrue(repository == get.then().extract().path("repo.repositories[0]"))
Assert.assertTrue(action1 == get.then().extract().path("repo.actions.users.${user1}[0]"))
Assert.assertTrue(action2 == get.then().extract().path("repo.actions.users.${user1}[1]"))
Assert.assertTrue(action3 == get.then().extract().path("repo.actions.users.${user1}[2]"))
Assert.assertTrue(action1 == get.then().extract().path("repo.actions.users.${user2}[0]"))
Assert.assertTrue(action2 == get.then().extract().path("repo.actions.users.${user2}[1]"))
Assert.assertTrue(action3 == get.then().extract().path("repo.actions.users.${user2}[2]"))
Assert.assertTrue(action1 == get.then().extract().path("repo.actions.groups.${group1}[0]"))
Assert.assertTrue(action2 == get.then().extract().path("repo.actions.groups.${group2}[1]"))
Assert.assertTrue(action1 == get.then().extract().path("repo.actions.groups.${group2}[0]"))
Assert.assertTrue(action2 == get.then().extract().path("repo.actions.groups.${group2}[1]"))
Reporter.log("- Create permissions. Permissions successfully created and verified", true)
}
@Test(priority=7, groups=["pro"], testName = "Delete permissions")
void deletePermissionsTest(){
def permissionName = "testPermission"
Response delete = deletePermissions(permissionName)
delete.then().statusCode(200)
Reporter.log("- Delete permissions. User ${permissionName} has been removed successfully", true)
}
@Test(priority=8, groups=["pro"], dataProvider = "users", testName = "Delete non-default users")
void deleteUserTest(usernameRt, email, passwordRt){
Response delete = deleteUser(usernameRt)
delete.then().statusCode(200).body(Matchers.containsString("${usernameRt}"))
Reporter.log("- Delete user. User ${usernameRt} has been removed successfully", true)
}
@Test(priority=9, groups=["pro"], dataProvider = "groups", testName = "Delete non-default groups")
void deleteGroupTest(groupName){
Response delete = deleteGroup(groupName)
delete.then().statusCode(200).body(Matchers.containsString("${groupName}"))
Reporter.log("- Delete group. Group ${groupName} has been removed successfully", true)
}
}

View File

@@ -1,332 +0,0 @@
package tests
import io.restassured.RestAssured
import io.restassured.response.Response
import org.testng.Assert
import org.testng.Reporter
import org.testng.annotations.BeforeSuite
import org.testng.annotations.BeforeTest
import org.testng.annotations.Test
import org.yaml.snakeyaml.Yaml
import steps.XraySteps
import java.time.LocalDate
import static org.hamcrest.Matchers.containsStringIgnoringCase
import static org.hamcrest.Matchers.emptyArray
import static org.hamcrest.Matchers.equalTo
import static org.hamcrest.Matchers.hasItem
import static org.hamcrest.Matchers.is
import static org.hamcrest.Matchers.isA
import static org.hamcrest.Matchers.not
import static org.hamcrest.Matchers.notNullValue
import static org.hamcrest.Matchers.nullValue
class XrayTest extends XraySteps{
Yaml yaml = new Yaml()
def configFile = new File("./src/test/resources/testenv.yaml")
def config = yaml.load(configFile.text)
def artifactoryURL
def distribution
def username
def password
def randomIndex
def policyName
def watchName
@BeforeSuite(groups=["xray"])
def setUp() {
artifactoryURL = config.artifactory.external_ip
distribution = config.artifactory.distribution
username = config.artifactory.rt_username
password = config.artifactory.rt_password
RestAssured.authentication = RestAssured.basic(username, password)
RestAssured.useRelaxedHTTPSValidation()
Random random = new Random()
randomIndex = random.nextInt(10000000)
policyName = "security_policy_${randomIndex}"
watchName = "all-repositories_${randomIndex}"
}
@BeforeTest(groups=["xray"])
def testSetUp() {
RestAssured.baseURI = "http://${artifactoryURL}/xray/api"
}
@Test(priority=1, groups=["xray"], dataProvider = "issueEvents", testName = "Create Issue Event")
void createIssueEventTest(issueID, cve, summary, description){
Response create = createIssueEvent(issueID+randomIndex, cve, summary, description, username, password)
create.then().statusCode(201)
Response get = getIssueEvent(issueID+randomIndex, username, password)
get.then().statusCode(200)
def issueIDverification = get.then().extract().path("id")
def cveVerification = get.then().extract().path("source_id")
def summaryVerification = get.then().extract().path("summary")
def descriptionVerification = get.then().extract().path("description")
Assert.assertTrue(issueID+randomIndex == issueIDverification)
Assert.assertTrue(cve == cveVerification)
Assert.assertTrue(summary == summaryVerification)
Assert.assertTrue(description == descriptionVerification)
Reporter.log("- Create issue event. Issue event with ID ${issueID+randomIndex} created and verified successfully", true)
}
@Test(priority=2, groups=["xray"], dataProvider = "issueEvents", testName = "Update Issue Event",
dependsOnMethods = "createIssueEventTest")
void updateIssueEventTest(issueID, cve, summary, description){
cve = "CVE-2017-0000000"
summary = "Updated"
description = "Updated"
Response update = updateIssueEvent(issueID+randomIndex, cve, summary, description, username, password)
update.then().statusCode(200)
Response get = getIssueEvent(issueID+randomIndex, username, password)
get.then().statusCode(200)
def cveVerification = get.then().extract().path("source_id")
def summaryVerification = get.then().extract().path("summary")
def descriptionVerification = get.then().extract().path("description")
Assert.assertTrue(cve == cveVerification)
Assert.assertTrue(summary == summaryVerification)
Assert.assertTrue(description == descriptionVerification)
Reporter.log("- Update issue event. Issue event with ID ${issueID+randomIndex} updated and verified successfully", true)
}
@Test(priority=3, groups=["xray"], testName = "Create policy")
void createPolicyTest(){
Response create = createPolicy(policyName, username, password)
create.then().statusCode(201)
Response get = getPolicy(policyName, username, password)
get.then().statusCode(200)
def policyNameVerification = get.then().extract().path("name")
Assert.assertTrue(policyName == policyNameVerification)
Reporter.log("- Create policy. Policy with name ${policyName} created and verified successfully", true)
}
@Test(priority=4, groups=["xray"], testName = "Update policy", dependsOnMethods = "createPolicyTest")
void updatePolicyTest(){
def description = "Updated description"
Response update = updatePolicy(policyName, description, username, password)
update.then().statusCode(200)
Response get = getPolicy(policyName, username, password)
get.then().statusCode(200)
def descriptionVerification = get.then().extract().path("description")
Assert.assertTrue(description == descriptionVerification)
Reporter.log("- Update policy. Policy with name ${policyName} updated and verified successfully", true)
}
@Test(priority=4, groups=["xray"], testName = "Get policies")
void getPoliciesTest(){
Response response = getPolicies(username, password)
response.then().statusCode(200)
.body("name", notNullValue())
.body("type", notNullValue())
.body("description", notNullValue())
.body("author", notNullValue())
.body("rules", notNullValue())
.body("created", notNullValue())
.body("modified", notNullValue())
def policies = response.then().extract().path("name")
Reporter.log("- Get policies. Policies list is returned successfully. " +
"Policies returned: ${policies}", true)
}
@Test(priority=5, groups=["xray"], testName = "Create watch for the repositories", dependsOnMethods = "createPolicyTest")
void createWatchTest(){
Response create = createWatchEvent(watchName, policyName, username, password)
create.then().statusCode(201)
.body("info",
equalTo("Watch has been successfully created"))
Response get = getWatchEvent(watchName, username, password)
get.then().statusCode(200)
.body("general_data.name", equalTo((watchName).toString()))
Reporter.log("- Create watch. Watch with name ${watchName} has been created and verified successfully", true)
}
@Test(priority=6, groups=["xray"], testName = "Update watch for the repositories", dependsOnMethods = "createWatchTest")
void updateWatchTest(){
def description = "Updated watch"
Response create = updateWatchEvent(watchName, description, policyName, username, password)
create.then().statusCode(200)
.body("info",
equalTo("Watch was successfully updated"))
Response get = getWatchEvent(watchName, username, password)
get.then().statusCode(200)
.body("general_data.description", equalTo(description))
Reporter.log("- Update watch. Watch with name ${watchName} has been updated and verified successfully", true)
}
@Test(priority=7, groups=["xray"], testName = "Assign policy to watches")
void assignPolicyToWatchTest(){
Response response = assignPolicy(watchName, policyName, username, password)
response.then().statusCode(200)
.body("result.${watchName}",
equalTo("Policy assigned successfully to Watch"))
Reporter.log("- Assign policy to watch. Policy assigned successfully to Watch", true)
}
@Test(priority=8, groups=["xray"], testName = "Delete watch")
void deleteWatchTest(){
Response response = deleteWatchEvent(watchName, username, password)
response.then().statusCode(200)
.body("info",
equalTo("Watch was deleted successfully"))
Reporter.log("- Delete watch. Watch ${watchName} has been successfully deleted", true)
}
@Test(priority=9, groups=["xray"], testName = "Delete policy")
void deletePolicyTest(){
Response response = deletePolicy(policyName, username, password)
response.then().statusCode(200)
.body("info",
equalTo(("Policy ${policyName} was deleted successfully").toString()))
Reporter.log("- Delete policy. Policy ${policyName} has been successfully deleted", true)
}
/* @Test(priority=10, groups=["xray"], testName = "Start scan")
void startScanTest(){
def artifactPath = "default/generic-dev-local/test-directory/artifact.zip"
Response getSha = artifactSummary(username, password, artifactPath)
def componentID = getSha.then().extract().path("artifacts[0].licenses[0].components[0]")
Response scan = startScan(username, password, componentID)
scan.then().statusCode(200)
.body("info",
equalTo(("Scan of artifact is in progress").toString()))
Reporter.log("- Start scan. Scan of ${componentID} has been started successfully", true)
}*/
@Test(priority=11, groups=["xray"], testName = "Create and get integration configuration")
void integrationConfigurationTest(){
def vendorName = "vendor_${randomIndex}"
Response post = addtIntegrationConfiguration(username, password, vendorName)
post.then().statusCode(200)
Response get = getIntegrationConfiguration(username, password)
int bodySize = get.body().jsonPath().getList(".").size()
get.then().statusCode(200)
.body("[" + (bodySize-1) + "].vendor", equalTo(vendorName.toString()))
Reporter.log("- Integration configuration. " +
"Configuration for vendor ${vendorName} has been successfully added and verified", true)
}
@Test(priority=12, groups=["xray"], testName = "Enable TLS for RabbitMQ")
void enableTLSRabbitMQTest(){
File body = new File("./src/test/resources/enableRabbitMQ.json")
Response post = postSystemParameters(username, password, body)
post.then().statusCode(200)
Response get = getSystemParameters(username, password)
get.then().statusCode(200).body("enableTlsConnectionToRabbitMQ", equalTo(true))
Reporter.log("- Enable TLS for RabbitMQ. TLS for RabbitMQ has been successfully enabled and verified", true)
}
@Test(priority=13, groups=["xray"], testName = "Get binary manager")
void getBinaryManagerTest(){
Response response = getBinaryManager(username, password)
response.then().statusCode(200)
.body("binMgrId", equalTo("default"))
.body("license_valid", equalTo(true))
.body("binMgrId", equalTo("default"))
def version = response.then().extract().path("version")
Reporter.log("- Get binary manager. Binary manager is verified, connected RT version: ${version}", true)
}
@Test(priority=14, groups=["xray"], testName = "Get repo indexing configuration")
void getIndexingConfigurationTest(){
Response response = getIndexingConfiguration(username, password)
response.then().statusCode(200)
.body("bin_mgr_id", equalTo("default"))
.body("indexed_repos.name", hasItem("generic-dev-local"))
Reporter.log("- Get repo indexing configuration.", true)
}
@Test(priority=15, groups=["xray"], testName = "Update repo indexing configuration")
void updateIndexingConfigurationTest(){
Response response = updateIndexingConfiguration(username, password)
response.then().statusCode(200)
.body("info", equalTo("Repositories list has been successfully sent to Artifactory"))
Reporter.log("- Update repo indexing configuration. Successfully updated", true)
}
// Force reindex test, add in latest versions of X-ray
/* @Test(priority=16, groups=["xray"], testName = "Get artifact summary")
void artifactSummaryTest(){
def artifactPath = "default/generic-dev-local/test-directory/artifact.zip"
Response post = artifactSummary(username, password, artifactPath)
post.then().statusCode(200)
.body("artifacts[0].general.path", equalTo(artifactPath))
Reporter.log("- Get artifact summary. Artifact summary has been returned successfully", true)
}*/
@Test(priority=17, groups=["xray"], testName = "Create support bundle")
void createSupportBundleTest(){
def name = "Support Bundle"
LocalDate startDate = LocalDate.now().minusDays(5)
LocalDate endDate = LocalDate.now()
Response response = createSupportBundle(username, password, name, startDate, endDate)
def bundle_url = response.then().extract().path("artifactory.bundle_url")
if ((bundle_url.toString()).contains(artifactoryURL)) {
Reporter.log("- Create support bundle. Successfully created using X-ray API", true)
} else if (((bundle_url.toString()).contains("localhost"))){
Reporter.log("- Create support bundle. Created with a bug, localhost instead of the hostname", true)
}
}
@Test(priority=18, groups=["xray"], testName = "Get system monitoring status")
void getSystemMonitoringTest(){
Response response = getSystemMonitoringStatus(username, password)
response.then().statusCode(200)
Reporter.log("- Get system monitoring status. Data returned successfully", true)
}
@Test(priority=19, groups=["xray"], testName = "X-ray ping request")
void xrayPingRequestTest(){
Response response = xrayPingRequest(username, password)
response.then().statusCode(200)
.body("status", equalTo("pong"))
Reporter.log("- Get system monitoring status. Data returned successfully", true)
}
@Test(priority=20, groups=["xray"], testName = "X-ray version")
void xrayGetVersionTest(){
Response response = xrayGetVersion(username, password)
response.then().statusCode(200)
.body("xray_version", notNullValue())
.body("xray_revision", notNullValue())
def version = response.then().extract().path("xray_version")
def revision = response.then().extract().path("xray_revision")
Reporter.log("- Get X-ray version. Version: ${version}, revision: ${revision}", true)
}
}