You've already forked jenkins-lib
forked from jenkins/jenkins-lib
bump mockito, add tests, fix errors
This commit is contained in:
@@ -48,7 +48,7 @@ dependencies {
|
||||
testRuntimeOnly("org.junit.jupiter", "junit-jupiter-engine", junitVersion)
|
||||
|
||||
testImplementation("org.assertj", "assertj-core", "3.15.0")
|
||||
testImplementation("org.mockito", "mockito-core", "3.3.3")
|
||||
testImplementation("org.mockito", "mockito-core", "5.11.0")
|
||||
|
||||
testImplementation("org.slf4j", "slf4j-api", slf4jVersion)
|
||||
testImplementation("org.slf4j", "slf4j-simple", slf4jVersion)
|
||||
|
@@ -178,21 +178,27 @@
|
||||
"description" : "Массив расширений для загрузки в конфигурацию.",
|
||||
"items" : {
|
||||
"type" : "object",
|
||||
"id": "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions:extensions:exception",
|
||||
"description": "Информация о расширении для загрузки",
|
||||
"id" : "urn:jsonschema:ru:pulsar:jenkins:library:configuration:InitInfoBaseOptions:Extension",
|
||||
"properties" : {
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"description": "Имя расширения с которым оно грузится в конфигурацию"
|
||||
"description" : "Имя расширения, используемое при его загрузке в конфигурацию."
|
||||
},
|
||||
"initMethod" : {
|
||||
"type" : "string",
|
||||
"description": "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromFile - использование скомпилированного cfe.",
|
||||
"description" : "\n Способ инициализации расширения.\n Поддерживается два варианта:\n * fromSource - инициализация расширения из исходников;\n * fromFile - скачивание скомпилированного cfe по ссылке.\n ",
|
||||
"enum" : [ "fromSource", "fromFile" ]
|
||||
},
|
||||
"path" : {
|
||||
"type" : "string",
|
||||
"description": "Хранит в себе путь к расширению.\n * В случае если выбран initMethod <fromSource> - указывается путь к исходникам расширения.\n * В случае если выбран initMethod <fromFile> - указывается путь к cfe-файлу"
|
||||
"description" : "\n Путь к расширению.\n * В случае если выбран initMethod <fromSource> - указывается путь к исходникам расширения.\n * В случае если выбран initMethod <fromFile> - указывается путь к cfe-файлу\n "
|
||||
},
|
||||
"stages" : {
|
||||
"type" : "array",
|
||||
"description" : "\n Шаги, на которых необходимо использовать расширение\n * Если не заполнено, то расширение будет подключено при инициализации базы и останется в базе на всех последующих шагах.\n * Если заполнено, то расширение будет подключено только на соответствующих шагах.\n ",
|
||||
"items" : {
|
||||
"type" : "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -379,12 +385,7 @@
|
||||
"type" : "array",
|
||||
"items" : {
|
||||
"type" : "string",
|
||||
"enum": [
|
||||
"developers",
|
||||
"requestor",
|
||||
"brokenBuildSuspects",
|
||||
"brokenTestsSuspects"
|
||||
]
|
||||
"enum" : [ "developers", "requestor", "brokenBuildSuspects", "brokenTestsSuspects" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -64,7 +64,6 @@ class InitInfoBaseOptions implements Serializable {
|
||||
", runMigration=" + runMigration +
|
||||
", additionalInitializationSteps=" + additionalInitializationSteps +
|
||||
", extensions=" + extensions +
|
||||
", vrunnerSettings=" + vrunnerSettings +
|
||||
'}'
|
||||
}
|
||||
}
|
||||
|
@@ -14,27 +14,31 @@ class LoadExtensions implements Serializable {
|
||||
private final JobConfiguration config
|
||||
private final String stageName
|
||||
|
||||
private Extension[] extensionsFiltered
|
||||
|
||||
LoadExtensions(JobConfiguration config, String stageName = "") {
|
||||
this.config = config
|
||||
this.stageName = stageName
|
||||
}
|
||||
|
||||
Extension[] getExtensionsFiltered() {
|
||||
return extensionsFiltered
|
||||
}
|
||||
|
||||
def run() {
|
||||
IStepExecutor steps = ContextRegistry.getContext().getStepExecutor()
|
||||
|
||||
Logger.printLocation()
|
||||
|
||||
|
||||
Extension[] filteredExtensions
|
||||
def extensions = this.config.initInfoBaseOptions.extensions
|
||||
|
||||
if (this.stageName) {
|
||||
filteredExtensions = extensions.findAll { extension ->
|
||||
this.extensionsFiltered = extensions.findAll { extension ->
|
||||
extension.stages.contains(this.stageName)
|
||||
}
|
||||
}
|
||||
else {
|
||||
filteredExtensions = extensions.findAll { extension -> extension.stages.empty || extension.stages.contains("initInfoBase") }
|
||||
this.extensionsFiltered = extensions.findAll { extension -> extension.stages.empty || extension.stages.contains("initInfoBase") }
|
||||
}
|
||||
|
||||
def env = steps.env()
|
||||
@@ -42,7 +46,7 @@ class LoadExtensions implements Serializable {
|
||||
|
||||
String vrunnerPath = VRunner.getVRunnerPath()
|
||||
|
||||
filteredExtensions.each {
|
||||
this.extensionsFiltered.each {
|
||||
Logger.println("Установим расширение ${it.name}")
|
||||
loadExtension(it, vrunnerPath, steps, cfeDir)
|
||||
}
|
||||
@@ -62,7 +66,7 @@ class LoadExtensions implements Serializable {
|
||||
loadCommand += executeParameter
|
||||
loadCommand += ' --ibconnection "/F./build/ib"'
|
||||
|
||||
String vrunnerSettings = getVrunnerSettings(this.config, this.stageName)
|
||||
String vrunnerSettings = getVrunnerSettingsForStage(this.config, this.stageName)
|
||||
if (vrunnerSettings && steps.fileExists(vrunnerSettings)) {
|
||||
loadCommand += " --settings $vrunnerSettings"
|
||||
}
|
||||
@@ -73,7 +77,7 @@ class LoadExtensions implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
private static String getVrunnerSettings(JobConfiguration config, String stageName) {
|
||||
private static String getVrunnerSettingsForStage(JobConfiguration config, String stageName) {
|
||||
|
||||
if (!stageName) {
|
||||
return ""
|
||||
|
@@ -47,7 +47,7 @@ class jobConfigurationTest {
|
||||
'jobConfiguration.json',
|
||||
StandardCharsets.UTF_8,
|
||||
this.getClass().getClassLoader()
|
||||
);
|
||||
)
|
||||
|
||||
def writeFile = """
|
||||
writeFile text: \"\"\"$file\"\"\", file: 'jobConfiguration.json'
|
||||
@@ -74,6 +74,5 @@ class jobConfigurationTest {
|
||||
rule.assertLogContains("v8version='8.3.12.1500'", run)
|
||||
rule.assertLogContains("sonarScannerToolName='sonar-scanner'", run)
|
||||
rule.assertLogContains("initMethod=FROM_SOURCE", run)
|
||||
rule.assertLogContains("custom_units", run)
|
||||
}
|
||||
}
|
@@ -1,19 +1,23 @@
|
||||
package ru.pulsar.jenkins.library.steps;
|
||||
|
||||
import hudson.FilePath;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import ru.pulsar.jenkins.library.IStepExecutor;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
import ru.pulsar.jenkins.library.configuration.ConfigurationReader;
|
||||
import ru.pulsar.jenkins.library.configuration.JobConfiguration;
|
||||
import ru.pulsar.jenkins.library.utils.FileUtils;
|
||||
import ru.pulsar.jenkins.library.utils.TestUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
|
||||
class LoadExtensionsTest {
|
||||
|
||||
@@ -25,21 +29,25 @@ class LoadExtensionsTest {
|
||||
@Test
|
||||
void runYaxunit() throws IOException {
|
||||
|
||||
try (MockedStatic<FileUtils> fu = Mockito.mockStatic(FileUtils.class)) {
|
||||
fu.when(() -> FileUtils.getFilePath(anyString()))
|
||||
.thenReturn(new FilePath(new File("/")));
|
||||
|
||||
// given
|
||||
// файл содержит 2 расширения для двух стейджей
|
||||
String config = IOUtils.resourceToString(
|
||||
"jobConfiguration.json",
|
||||
StandardCharsets.UTF_8,
|
||||
this.getClass().getClassLoader()
|
||||
);
|
||||
|
||||
// when
|
||||
JobConfiguration jobConfiguration = ConfigurationReader.create(config);
|
||||
|
||||
LoadExtensions loadExtensions = new LoadExtensions(jobConfiguration, "yaxunit");
|
||||
|
||||
// when
|
||||
Object run = loadExtensions.run();
|
||||
loadExtensions.run();
|
||||
|
||||
// assertThat(log.toString).(1);
|
||||
// then
|
||||
assertThat(loadExtensions.getExtensionsFiltered().length).isEqualTo(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,32 @@
|
||||
package ru.pulsar.jenkins.library.utils;
|
||||
|
||||
import hudson.EnvVars;
|
||||
import org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class EnvUtils implements EnvironmentAction {
|
||||
|
||||
public String NODE_NAME = "node";
|
||||
public String WORKSPACE = "ws";
|
||||
|
||||
@Override
|
||||
public EnvVars getEnvironment() throws IOException, InterruptedException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIconFileName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDisplayName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUrlName() {
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -28,6 +28,8 @@ public class TestUtils {
|
||||
);
|
||||
});
|
||||
|
||||
when(steps.env()).thenAnswer(invocation -> new EnvUtils());
|
||||
|
||||
when(steps.readFile(anyString(), anyString())).thenAnswer(invocation -> {
|
||||
String file = invocation.getArgument(0);
|
||||
String encoding = invocation.getArgument(1);
|
||||
|
@@ -14,6 +14,20 @@
|
||||
"runMigration": false,
|
||||
"additionalInitializationSteps": [
|
||||
"vanessa --settings ./tools/vrunner.first.json"
|
||||
],
|
||||
"extensions": [
|
||||
{
|
||||
"name": "YAXUnit",
|
||||
"initMethod": "fromSource",
|
||||
"path": "./src/cfe/YAXUnit",
|
||||
"stages": ["yaxunit"]
|
||||
},
|
||||
{
|
||||
"name": "BDD",
|
||||
"initMethod": "fromSource",
|
||||
"path": "./src/cfe/bdd",
|
||||
"stages": ["bdd"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"sonarqube": {
|
||||
|
Reference in New Issue
Block a user