mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-07 05:28:34 +00:00
This commit delete the JIRA issues after the integration test execution. All issues from the testing project XWT are deleted, even if they have not been created during this specific test execution. closes elastic/elasticsearch#4535 Original commit: elastic/x-pack-elasticsearch@0362463633
93 lines
3.6 KiB
Groovy
93 lines
3.6 KiB
Groovy
import groovy.json.JsonSlurper
|
|
|
|
import javax.net.ssl.HttpsURLConnection
|
|
import java.nio.charset.StandardCharsets
|
|
|
|
apply plugin: 'elasticsearch.standalone-rest-test'
|
|
apply plugin: 'elasticsearch.rest-test'
|
|
|
|
dependencies {
|
|
testCompile project(path: ':x-pack:elasticsearch', configuration: 'runtime')
|
|
}
|
|
|
|
ext {
|
|
jiraUrl = 'https://elasticsearch.atlassian.net/'
|
|
jiraUser = 'xpack-user@elastic.co'
|
|
jiraPassword = 'N9M4ea9rfy'
|
|
jiraProject = 'XWT'
|
|
}
|
|
|
|
integTest {
|
|
cluster {
|
|
plugin ':x-pack:elasticsearch'
|
|
setting 'xpack.security.enabled', 'false'
|
|
setting 'xpack.monitoring.enabled', 'false'
|
|
setting 'http.port', '9400'
|
|
// Need to allow more compilations per minute because of the integration tests
|
|
setting 'script.max_compilations_per_minute', '100'
|
|
|
|
//
|
|
// JIRA integration test settings
|
|
//
|
|
// The integration tests use a JIRA account on elasticsearch.atlassian.net. This account
|
|
// has been created by Edward Sy [edward@elastic.co]. It uses the "XPACK WATCHER TEST"
|
|
// Jira project available at https://elasticsearch.atlassian.net/projects/XWT/issues/?filter=allopenissues
|
|
// and the "xpack-user@elastic.co" username which is also an internal Google Group.
|
|
setting 'xpack.notification.jira.account.test.url', jiraUrl
|
|
setting 'xpack.notification.jira.account.test.user', jiraUser
|
|
setting 'xpack.notification.jira.account.test.password', jiraPassword
|
|
setting 'xpack.notification.jira.account.test.issue_defaults.project.key', jiraProject
|
|
setting 'xpack.notification.jira.account.test.issue_defaults.labels', ['integration-tests', project.version]
|
|
}
|
|
}
|
|
|
|
/** Clean up JIRA after tests: delete all created issues **/
|
|
task cleanJira(type: DefaultTask) {
|
|
doLast {
|
|
def issues = jiraIssues(jiraProject)
|
|
assert issues instanceof List
|
|
issues.forEach {
|
|
// See https://docs.atlassian.com/jira/REST/cloud/#api/2/issue-deleteIssue
|
|
logger.debug("Deleting JIRA issue [${it}]")
|
|
jiraHttpRequest("issue/${it}", "DELETE", 204)
|
|
}
|
|
}
|
|
}
|
|
integTest.finalizedBy cleanJira
|
|
|
|
/** List all issues associated to a given Jira project **/
|
|
def jiraIssues(String projectKey) {
|
|
// See https://docs.atlassian.com/jira/REST/cloud/#api/2/search-search
|
|
def response = jiraHttpRequest("search?maxResults=100&fields=id,self,key&jql=project%3D${projectKey}", "GET", 200)
|
|
assert response.issues instanceof List
|
|
return response.issues.findAll {it.key.startsWith(projectKey)}.collect {it.key}
|
|
}
|
|
|
|
/** Execute a HTTP request against the Jira server instance **/
|
|
def jiraHttpRequest(String endpoint, String method, int successCode) {
|
|
HttpsURLConnection connection = null;
|
|
try {
|
|
byte[] credentials = "${jiraUser}:${jiraPassword}".getBytes(StandardCharsets.UTF_8);
|
|
connection = (HttpsURLConnection) new URL("${jiraUrl}/rest/api/2/${endpoint}").openConnection();
|
|
connection.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString(credentials));
|
|
connection.setRequestMethod(method);
|
|
connection.connect();
|
|
|
|
if (connection.getResponseCode() == successCode) {
|
|
String response = connection.getInputStream().getText(StandardCharsets.UTF_8.name());
|
|
if (response != null && response.length() > 0) {
|
|
return new JsonSlurper().parseText(response)
|
|
}
|
|
} else {
|
|
throw new GradleException("Unexpected response code for [${endpoint}]: got ${connection.getResponseCode()} but expected ${successCode}")
|
|
}
|
|
} catch (Exception e) {
|
|
logger.error("Failed to delete JIRA issues after test execution", e)
|
|
} finally {
|
|
if (connection != null) {
|
|
connection.disconnect();
|
|
}
|
|
}
|
|
return null
|
|
}
|