Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ plugins {

repositories {
mavenCentral()
maven {
url = uri("https://repo.jenkins-ci.org/public/")
}
}

tasks {
Expand Down
2 changes: 2 additions & 0 deletions src/ru/pulsar/jenkins/library/IStepExecutor.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ interface IStepExecutor {

void createDir(String path)

void createDir(String path, boolean deleteDir)

void deleteDir()

void deleteDir(String path)
Expand Down
5 changes: 5 additions & 0 deletions src/ru/pulsar/jenkins/library/StepExecutor.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@ class StepExecutor implements IStepExecutor {
steps.createDir(path)
}

@Override
void createDir(String path, boolean deleteDir) {
steps.createDir(path, deleteDir)
}

@Override
def dir(String path, Closure body) {
steps.dir(path) {
Expand Down
10 changes: 10 additions & 0 deletions src/ru/pulsar/jenkins/library/steps/InitInfoBase.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import ru.pulsar.jenkins.library.configuration.JobConfiguration
import ru.pulsar.jenkins.library.ioc.ContextRegistry
import ru.pulsar.jenkins.library.utils.Logger
import ru.pulsar.jenkins.library.utils.VRunner
import ru.pulsar.jenkins.library.utils.FileUtils

class InitInfoBase implements Serializable {

Expand All @@ -27,6 +28,15 @@ class InitInfoBase implements Serializable {
return
}

def env = steps.env();

String workspaceAllure = FileUtils.getFilePath("$env.WORKSPACE/build/out/allure").getRemote()
Logger.println("Очистка каталога Allure: $workspaceAllure")
steps.deleteDir(workspaceAllure)
String workspaceCucumber = FileUtils.getFilePath("$env.WORKSPACE/build/out/cucumber").getRemote()
Logger.println("Очистка каталога Cucumber: $workspaceCucumber")
steps.deleteDir(workspaceCucumber)

def isInfobaseInitialized = true

List<String> logosConfig = ["LOGOS_CONFIG=$config.logosConfig"]
Expand Down
6 changes: 4 additions & 2 deletions src/ru/pulsar/jenkins/library/steps/SmokeTest.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,17 @@ class SmokeTest implements Serializable, Coverable {
StringJoiner reportsConfigConstructor = new StringJoiner(";")

if (options.publishToJUnitReport) {
steps.createDir(junitReportDir)
boolean deleteDir = true
steps.createDir(junitReportDir, deleteDir)

String junitReportCommand = "ГенераторОтчетаJUnitXML{$junitReport}"

reportsConfigConstructor.add(junitReportCommand)
}

if (options.publishToAllureReport) {
steps.createDir(allureReportDir)
boolean deleteDir = true
steps.createDir(allureReportDir, deleteDir)

String allureReportCommand = "ГенераторОтчетаAllureXMLВерсия2{$allureReport}"

Expand Down
6 changes: 4 additions & 2 deletions src/ru/pulsar/jenkins/library/steps/SyntaxCheck.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,14 @@ class SyntaxCheck {
}

if (options.publishToJUnitReport) {
steps.createDir(junitReportDir)
boolean deleteDir = true
steps.createDir(junitReportDir, deleteDir)
command += " --junitpath $pathToJUnitReport"
}

if (options.publishToAllureReport) {
steps.createDir(allureReportDir)
boolean deleteDir = true
steps.createDir(allureReportDir, deleteDir)
command += " --allure-results2 $allureReportDir"
}

Expand Down
4 changes: 4 additions & 0 deletions src/ru/pulsar/jenkins/library/steps/Yaxunit.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ class Yaxunit implements Serializable, Coverable {
}

steps.withEnv(logosConfig) {

String workspaceYaxunit = FileUtils.getFilePath("$env.WORKSPACE/build/out/allure").getRemote()
Logger.println("Очистка каталога результатов allure: $workspaceYaxunit")
steps.deleteDir(workspaceYaxunit)

steps.withCoverage(config, this, options) {
VRunner.exec(runTestsCommand, true)
Expand Down
136 changes: 136 additions & 0 deletions test/integration/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# Описание интеграционных тестов

## Общая информация

Все интеграционные тесты используют:
- **Jenkins Test Harness** для запуска тестового экземпляра Jenkins
- **RuleBootstrapper** для настройки локальной библиотеки как shared library
- **JUnit 4** для структуры тестов
- **Declarative Pipeline** для проверки работы в реальном Jenkins окружении

---

## 1. `jobConfigurationTest.groovy`

**Назначение:** Проверка функции `jobConfiguration()` для чтения и слияния конфигураций.

### Тесты:

1. **`"jobConfiguration should not fail without file"`**
- Проверяет, что `jobConfiguration()` не падает при отсутствии файла конфигурации
- Использует значения по умолчанию
- Ожидается успешное выполнение пайплайна

2. **`"jobConfiguration should merge configurations"`**
- Проверяет слияние конфигураций из файла `jobConfiguration.json`
- Создает файл конфигурации в workspace и проверяет значения:
- `v8version='8.3.12.1500'`
- `sonarScannerToolName='sonar-scanner'`
- `initMethod=FROM_SOURCE`
- `dbgsPath=C:\Program files\1cv8\8.3.12.1500\bin\dbgs.exe`
- `coverage41CPath=C:\coverage\Coverage41C.exe`

---

## 2. `pipeline1cTest.groovy`

**Назначение:** Проверка основного пайплайна `pipeline1C()`.

### Тесты:

1. **`"pipeline1C should do something"`**
- Проверяет базовое выполнение `pipeline1C()`
- Создает агента с меткой `"agent"`
- Проверяет наличие `'(pre-stage)'` в логах
- Минимальная проверка, что пайплайн запускается

---

## 3. `cmdTest.groovy`

**Назначение:** Проверка функции `cmd()` для выполнения команд.

### Тесты:

1. **`"cmd should echo something"`**
- Проверяет выполнение команды `echo helloWorld`
- Проверяет наличие `'helloWorld'` в логах
- Проверяет базовое выполнение команды

2. **`"cmd should return status"`**
- Проверяет возврат кода возврата команды
- Выполняет `cmd("false", true)` (второй параметр - возврат статуса)
- Проверяет, что статус равен `1` (команда `false` возвращает 1)
- Проверяет корректную обработку кода возврата

---

## 4. `printLocationTest.groovy`

**Назначение:** Проверка функции `printLocation()` для логирования информации о ноде.

### Тесты:

1. **`"Logger should echo current node name"`**
- Проверяет вывод имени текущего нода
- Проверяет наличие `'Running on node built-in'` в логах
- Проверяет корректное определение нода выполнения

---

## 5. `RuleBootstrapper.groovy` (вспомогательный класс)

**Назначение:** Утилита для настройки тестового окружения.

### Функции:
- Настраивает `JenkinsRule` для использования локального исходного кода как shared library
- Создает `LibraryConfiguration` с именем `'testLibrary'`
- Устанавливает библиотеку как неявно загружаемую (`implicit = true`)
- Устанавливает таймаут тестов в 30 секунд
- Используется во всех тестах через аннотацию `@Before`

---

## Ресурсы

### `test/integration/resources/jobConfiguration.json`

Тестовый файл конфигурации, содержит:
- Версию платформы 1С: `8.3.12.1500`
- Настройки инициализации ИБ (`fromSource`)
- Пример расширения конфигурации
- Настройки покрытия кода (пути к `dbgs.exe` и `Coverage41C.exe`)

---

## Итоговая статистика

- **Всего тестовых классов:** 4
- **Всего тестов:** 6
- **Вспомогательных классов:** 1 (`RuleBootstrapper`)
- **Тестовых ресурсов:** 1 (`jobConfiguration.json`)

## Покрытие функциональности

- ✅ Чтение и слияние конфигураций (`jobConfiguration`)
- ✅ Основной пайплайн (`pipeline1C`)
- ✅ Выполнение команд (`cmd`)
- ✅ Логирование информации о ноде (`printLocation`)

---

## Запуск тестов

Для запуска всех интеграционных тестов используйте:

```bash
.\gradlew.bat integrationTest
```

Для запуска конкретного теста:

```bash
.\gradlew.bat integrationTest --tests "jobConfigurationTest"
```

Тесты проверяют базовую функциональность библиотеки в реальном окружении Jenkins через Jenkins Test Harness.
5 changes: 4 additions & 1 deletion vars/createDir.groovy
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
def call(String path) {
def call(String path, boolean deleteDir = false) {
if (deleteDir && fileExists(path)) {
deleteDir(path)
}
dir(path) { echo '' }
}