From e7092934ac2523456e1c3e03fab32041dfcc36ef Mon Sep 17 00:00:00 2001 From: ArKuznetsov Date: Wed, 17 Jun 2020 22:16:05 +0300 Subject: [PATCH 1/2] =?UTF-8?q?test:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B,=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20travis?= =?UTF-8?q?,=20=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8?= =?UTF-8?q?=20sonar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- .travis.yml | 26 ++++++++++ sonar-project.properties | 20 ++++++++ tasks/coverage.os | 74 +++++++++++++++++++++++++++++ tasks/test.os | 22 +++++++++ tests/yard-test.os | 100 +++++++++++++++++++++++++++++++++++++++ travis.sh | 34 +++++++++++++ 7 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 .travis.yml create mode 100644 sonar-project.properties create mode 100644 tasks/coverage.os create mode 100644 tasks/test.os create mode 100644 tests/yard-test.os create mode 100644 travis.sh diff --git a/.gitignore b/.gitignore index 69c4933..42ecaa0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .vscode -tmp* \ No newline at end of file +tmp* +coverage +test-reports diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..dfc33a1 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,26 @@ +sudo: required +dist: trusty +addons: + sonarqube: true +jdk: + - openjdk11 +before_install: + - chmod +x travis.sh + - sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF + - echo "deb http://download.mono-project.com/repo/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/mono-official.list + - sudo apt-get update + - sudo apt-get install mono-complete mono-devel dos2unix + - wget -O os.deb http://oscript.io/downloads/latest/x64/deb + - sudo dpkg -i os.deb; sudo apt install -f + - oscript +install: + - sudo opm install + - sudo opm install 1testrunner + - sudo opm install v8runner + +cache: + directories: + - '$HOME/.m2/repository' + - '$HOME/.sonar/cache' +script: + - ./travis.sh \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..2aaf790 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,20 @@ +# must be unique in a given SonarQube instance +sonar.projectKey=yard + +# this is the name displayed in the SonarQube UI +sonar.projectName=yard + +# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. +# Since SonarQube 4.2, this property is optional if sonar.modules is set. +# If not set, SonarQube starts looking for source code from the directory containing +# the sonar-project.properties file. + +sonar.sources=./src +sonar.tests=./tests + +# Encoding of the source code. Default is default system encoding +sonar.sourceEncoding=UTF-8 + +sonar.coverageReportPaths=coverage/genericCoverage.xml + +sonar.testExecutionReportPaths=test-reports/tests.xml \ No newline at end of file diff --git a/tasks/coverage.os b/tasks/coverage.os new file mode 100644 index 0000000..8a5e574 --- /dev/null +++ b/tasks/coverage.os @@ -0,0 +1,74 @@ +#Использовать 1commands +#Использовать asserts +#Использовать fs +#Использовать json + +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + +ФС.ОбеспечитьПустойКаталог("coverage"); +ПутьКСтат = "coverage/stat.json"; + +Команда = Новый Команда; +Команда.УстановитьКоманду("oscript"); +Если НЕ ЭтоWindows Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); +КонецЕсли; +Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); +Команда.ДобавитьПараметр("tasks/test.os"); +Команда.ПоказыватьВыводНемедленно(Истина); + +КодВозврата = Команда.Исполнить(); + +Файл_Стат = Новый Файл(ПутьКСтат); +Ожидаем.Что(Файл_Стат.Существует(), + СтрШаблон("Файл <%1> с результатами покрытия не существует!", Файл_Стат.ПолноеИмя)).ЭтоИстина(); + +ЧтениеТекста = Новый ЧтениеТекста(ПутьКСтат, КодировкаТекста.UTF8); + +СтрокаJSON = ЧтениеТекста.Прочитать(); +ЧтениеТекста.Закрыть(); + +Парсер = Новый ПарсерJSON(); +ДанныеПокрытия = Парсер.ПрочитатьJSON(СтрокаJSON); + +ЗаписьXML = Новый ЗаписьXML; +ЗаписьXML.ОткрытьФайл("coverage/genericCoverage.xml"); +ЗаписьXML.ЗаписатьОбъявлениеXML(); +ЗаписьXML.ЗаписатьНачалоЭлемента("coverage"); +ЗаписьXML.ЗаписатьАтрибут("version", "1"); + +Для Каждого Файл Из ДанныеПокрытия Цикл + + ДанныеФайла = Файл.Значение; + + ЗаписьXML.ЗаписатьНачалоЭлемента("file"); + ЗаписьXML.ЗаписатьАтрибут("path", ДанныеФайла.Получить("#path")); + + Для Каждого КлючИЗначение Из ДанныеФайла Цикл + + Если КлючИЗначение.Ключ = "#path" Тогда + Продолжить; + КонецЕсли; + + ДанныеПроцедуры = КлючИЗначение.Значение; + Для Каждого ДанныеСтроки Из ДанныеПроцедуры Цикл + + ЗаписьXML.ЗаписатьНачалоЭлемента("lineToCover"); + + ЗаписьXML.ЗаписатьАтрибут("lineNumber", ДанныеСтроки.Ключ); + Покрыто = Число(ДанныеСтроки.Значение.Получить("count")) > 0; + ЗаписьXML.ЗаписатьАтрибут("covered", Формат(Покрыто, "БИ=true; БЛ=false")); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // lineToCover + КонецЦикла; + КонецЦикла; + + ЗаписьXML.ЗаписатьКонецЭлемента(); // file + +КонецЦикла; + +ЗаписьXML.ЗаписатьКонецЭлемента(); // coverage +ЗаписьXML.Закрыть(); + +ЗавершитьРаботу(КодВозврата); \ No newline at end of file diff --git a/tasks/test.os b/tasks/test.os new file mode 100644 index 0000000..9eba8a7 --- /dev/null +++ b/tasks/test.os @@ -0,0 +1,22 @@ +#Использовать 1testrunner + +Процедура ПровестиТестирование() + + Тестер = Новый Тестер; + + КаталогПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); + КаталогРезультатовТестов = Новый Файл(ОбъединитьПути(КаталогПроекта, "test-reports")); + Если Не КаталогРезультатовТестов.Существует() Тогда + СоздатьКаталог(КаталогРезультатовТестов.ПолноеИмя); + КонецЕсли; + + ФайлРезультатовТестовПакета = Новый Файл(КаталогРезультатовТестов.ПолноеИмя); + КаталогТестов = Новый Файл(ОбъединитьПути(КаталогПроекта, "tests")); + + Тестер.УстановитьФорматЛогФайла(Тестер.ФорматыЛогФайла().GenericExec); + + Тестер.ТестироватьКаталог(КаталогТестов, ФайлРезультатовТестовПакета); + +КонецПроцедуры + +ПровестиТестирование(); diff --git a/tests/yard-test.os b/tests/yard-test.os new file mode 100644 index 0000000..890ab71 --- /dev/null +++ b/tests/yard-test.os @@ -0,0 +1,100 @@ +// ---------------------------------------------------------- +// This Source Code Form is subject to the terms of the +// Mozilla Public License, v.2.0. If a copy of the MPL +// was not distributed with this file, You can obtain one +// at http://mozilla.org/MPL/2.0/. +// ---------------------------------------------------------- +// Codebase: https://github.com/ArKuznetsov/yabr.os/ +// ---------------------------------------------------------- + +#Использовать "../src" +#Использовать asserts +#Использовать fs +#Использовать tempfiles + +Перем ЮнитТест; +Перем ВременныйКаталог; + +Перем Лог; + +// Процедура выполняется после запуска теста +// +Процедура ПередЗапускомТеста() Экспорт + + Лог = ПараметрыПриложения.Лог(); + Лог.УстановитьУровень(УровниЛога.Информация); + +КонецПроцедуры // ПередЗапускомТеста() + +// Функция возвращает список тестов для выполнения +// +// Параметры: +// Тестирование - Тестер - Объект Тестер (1testrunner) +// +// Возвращаемое значение: +// Массив - Массив имен процедур-тестов +// +Функция ПолучитьСписокТестов(Тестирование) Экспорт + + ЮнитТест = Тестирование; + + СписокТестов = Новый Массив; + СписокТестов.Добавить("ТестДолжен_СписокПриложенийСВерсиямиССайта1С"); + СписокТестов.Добавить("ТестДолжен_ЗагрузитьВерсииПриложения"); + СписокТестов.Добавить("ТестДолжен_РаспаковатьВерсииПриложения"); + + Возврат СписокТестов; + +КонецФункции // ПолучитьСписокТестов() + +// Процедура выполняется после запуска теста +// +Процедура ПослеЗапускаТеста() Экспорт + +КонецПроцедуры // ПослеЗапускаТеста() + +// Процедура - тест +// +Процедура ТестДолжен_СписокПриложенийСВерсиямиССайта1С() Экспорт + + Пользователь = ПолучитьПеременнуюСреды("YARD_RELEASES_USER"); + Пароль = ПолучитьПеременнуюСреды("YARD_RELEASES_PWD"); + + Лог.Информация(Пользователь); + + ПараметрыОбработки = Новый Структура(); + ПараметрыОбработки.Вставить("ИмяПользователя", Пользователь); + + ПараметрыОбработки.Вставить("ПарольПользователя", Пароль); + ПараметрыОбработки.Вставить("ФильтрПриложений", "Библиотека стандартных подсистем.*3\.1"); + ПараметрыОбработки.Вставить("ФильтрВерсий", "3\.1\.3.*"); + // ПараметрыОбработки.Вставить("ФильтрВерсийНачинаяСДаты"); + // ПараметрыОбработки.Вставить("ФильтрВерсийДоДаты"); + // ПараметрыОбработки.Вставить("ПутьКФайлуДляСохранения"); + + СписокРелизов = Новый СписокРелизов1С(); + СписокРелизов.УстановитьПараметрыОбработкиДанных(ПараметрыОбработки); + СписокРелизов.ОбработатьДанные(); + + Утверждения.ПроверитьБольшеИлиРавно(СписокРелизов.РезультатОбработки().Количество(), + 1, + "Не удалось получить список релизов."); + +КонецПроцедуры // ТестДолжен_СписокПриложенийСВерсиямиССайта1С() + +// Процедура - тест +// +Процедура ТестДолжен_ЗагрузитьВерсииПриложения() Экспорт + + ВызватьИсключение "Не реализовано"; + +КонецПроцедуры // ТестДолжен_ЗагрузитьВерсииПриложения() + +// Процедура - тест +// +Процедура ТестДолжен_РаспаковатьВерсииПриложения() Экспорт + + ВызватьИсключение "Не реализовано"; + + +КонецПроцедуры // ТестДолжен_РаспаковатьВерсииПриложения() diff --git a/travis.sh b/travis.sh new file mode 100644 index 0000000..dc9d0e7 --- /dev/null +++ b/travis.sh @@ -0,0 +1,34 @@ + +#!/bin/bash +set -e + +sudo opm run coverage + +temp=`cat packagedef | grep ".Версия(" | sed 's|[^"]*"||' | sed -r 's/".+//'` +version=${temp##*|} + +if [ "$TRAVIS_SECURE_ENV_VARS" == "true" ]; then + if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then + sonar-scanner \ + -Dsonar.host.url=$SONAR_HOST \ + -Dsonar.analysis.mode=issues \ + -Dsonar.github.pullRequest=$TRAVIS_PULL_REQUEST \ + -Dsonar.github.repository=$TRAVIS_REPO_SLUG \ + -Dsonar.github.oauth=$SONAR_GITHUB_TOKEN \ + -Dsonar.login=$SONAR_TOKEN \ + -Dsonar.scm.enabled=true \ + -Dsonar.scm.provider=git \ + -Dsonar.scanner.skip=false \ + -Dsonar.branch.name=master + + elif [ "$TRAVIS_BRANCH" == "develop" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + sonar-scanner \ + -Dsonar.host.url=$SONAR_HOST \ + -Dsonar.login=$SONAR_TOKEN \ + -Dsonar.projectVersion=$version \ + -Dsonar.scm.enabled=true \ + -Dsonar.scm.provider=git \ + -Dsonar.scanner.skip=false \ + -Dsonar.branch.name=master + fi +fi \ No newline at end of file From ff4140eec096b17c28370d1f1f17b360a91f4d11 Mon Sep 17 00:00:00 2001 From: ArKuznetsov Date: Thu, 18 Jun 2020 00:08:44 +0300 Subject: [PATCH 2/2] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 42ecaa0..bc0621a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ tmp* coverage test-reports +*.ospx