Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot)
2026-04-10 08:51:45 +03:00
parent 65f0eb699a
commit 7eea251595
111 changed files with 17066 additions and 11209 deletions
+2 -1
View File
@@ -139,7 +139,8 @@
"ClickHouse": true,
"RSS": true,
"HTTP": true,
"Core": true
"Core": true,
"WebSocket": true
}
}
}
+1 -1
View File
@@ -1 +1 @@
66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349
C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B
@@ -582,6 +582,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['WebSocket', './service/yaxunit_conf/en/WebSocket.json'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -582,6 +582,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['WebSocket', './service/yaxunit_conf/ru/WebSocket.json'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -667,6 +667,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -667,6 +667,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -667,6 +667,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -667,6 +667,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -747,6 +747,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -747,6 +747,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -677,6 +677,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -677,6 +677,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -677,6 +677,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -677,6 +677,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -674,6 +674,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -674,6 +674,23 @@ pipeline {
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
stage('Testing-GreenAPI') {
when {
expression { return shouldRunStage('GreenAPI') }
@@ -0,0 +1,137 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
def runLibraryTest(String libraryName, String configPath) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
script {
runCommand("\"C:/Program Files (x86)/1cv8/8.3.26.1656/bin/1cv8c.exe\" /IBConnectionString \"Srvr=\"\"DEVSRV\"\";Ref=\"\"OpenIntegrationsEng\"\";\" /C\"RunUnitTests=${configPath}\"")
timeout(time: 60, unit: 'MINUTES') {
waitUntil {
fileExists "./test_results/${libraryName}.code"
}
}
if (fileExists("./test_results/${libraryName}.report")) {
def reportContent = readFile("./test_results/${libraryName}.report")
echo "=== ${libraryName} report content ==="
echo reportContent
echo "=========================="
} else {
echo "WARNING: ${libraryName}.report file not found"
}
def exitCode = readFile("./test_results/${libraryName}.code").trim().replaceAll("[^0-9]", "")
echo "Exit code for ${libraryName}: ${exitCode}"
if (exitCode != "0") {
error "Tests ${libraryName} failed with exit code: ${exitCode}"
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
pipeline {
agent {
label 'windows'
}
stages {
stage('Prepare Test Results Directory') {
steps {
script {
runCommand '''
if exist ".\\test_results" (
rmdir /s /q ".\\test_results"
)
mkdir ".\\test_results"
'''
}
}
}
stage('Create ReportPortal launch'){
steps{
bat encoding: 'UTF-8', script:'chcp 65001 & oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "1C:Enterprise"'
}
}
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['Core', './service/yaxunit_conf/en/Core.json'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['WebSocket', './service/yaxunit_conf/en/WebSocket.json'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
}
}
}
}
@@ -0,0 +1,137 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
def runLibraryTest(String libraryName, String configPath) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
script {
runCommand("\"C:/Program Files (x86)/1cv8/8.3.26.1656/bin/1cv8c.exe\" /IBConnectionString \"Srvr=\"\"DEVSRV\"\";Ref=\"\"OpenIntegrations\"\";\" /C\"RunUnitTests=${configPath}\"")
timeout(time: 60, unit: 'MINUTES') {
waitUntil {
fileExists "./test_results/${libraryName}.code"
}
}
if (fileExists("./test_results/${libraryName}.report")) {
def reportContent = readFile("./test_results/${libraryName}.report")
echo "=== ${libraryName} report content ==="
echo reportContent
echo "=========================="
} else {
echo "WARNING: ${libraryName}.report file not found"
}
def exitCode = readFile("./test_results/${libraryName}.code").trim().replaceAll("[^0-9]", "")
echo "Exit code for ${libraryName}: ${exitCode}"
if (exitCode != "0") {
error "Tests ${libraryName} failed with exit code: ${exitCode}"
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
pipeline {
agent {
label 'windows'
}
stages {
stage('Prepare Test Results Directory') {
steps {
script {
runCommand '''
if exist ".\\test_results" (
rmdir /s /q ".\\test_results"
)
mkdir ".\\test_results"
'''
}
}
}
stage('Create ReportPortal launch'){
steps{
bat encoding: 'UTF-8', script:'chcp 65001 & oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "1C:Enterprise"'
}
}
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['Core', './service/yaxunit_conf/ru/Core.json'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['WebSocket', './service/yaxunit_conf/ru/WebSocket.json'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
}
}
}
}
@@ -0,0 +1,149 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Deb-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove oint') {
steps {
script {
// Удаляем oint, если он установлен
sh 'dpkg -r oint || echo "oint not installed"'
}
}
}
stage('Download oint package') {
steps {
script {
// Скачиваем новый deb-пакет oint
sh 'wget -O oint_2.0.0_all_en.deb https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/lastSuccessfulBuild/artifact/2.0.0/oint_2.0.0_all_en.deb '
}
}
}
stage('Install oint package') {
steps {
script {
sh 'dpkg -i oint_2.0.0_all_en.deb'
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/en/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "CLI"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_Core.os', 'CheckIBToLastBuildCompliance'],
['./src/en/OInt/tests/Modules/OPItc_Core.os', 'ValidateAdvancedCall'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,149 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Deb-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove oint') {
steps {
script {
// Удаляем oint, если он установлен
sh 'dpkg -r oint || echo "oint not installed"'
}
}
}
stage('Download oint package') {
steps {
script {
// Скачиваем новый deb-пакет oint
sh 'wget -O oint_2.0.0_all_ru.deb https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/lastSuccessfulBuild/artifact/2.0.0/oint_2.0.0_all_ru.deb '
}
}
}
stage('Install oint package') {
steps {
script {
sh 'dpkg -i oint_2.0.0_all_ru.deb'
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/ru/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "CLI"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_Core.os', 'ПроверитьСоответствиеИБПоследнейСборке'],
['./src/ru/OInt/tests/Modules/OPItc_Core.os', 'ПроверитьРасширенныйВызов'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,149 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Rpm-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove oint') {
steps {
script {
// Удаляем oint, если он установлен
sh 'rpm -e oint || echo "oint not installed"'
}
}
}
stage('Download oint package') {
steps {
script {
// Скачиваем новый rpm-пакет oint
sh 'wget -O oint-2.0.0-1.noarch_en.rpm https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/lastSuccessfulBuild/artifact/2.0.0/oint-2.0.0-1.noarch_en.rpm '
}
}
}
stage('Install oint package') {
steps {
script {
// Устанавливаем скаченный пакет
sh 'rpm -ivh --replacepkgs oint-2.0.0-1.noarch_en.rpm'
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/en/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "CLI"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_Core.os', 'CheckIBToLastBuildCompliance'],
['./src/en/OInt/tests/Modules/OPItc_Core.os', 'ValidateAdvancedCall'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,149 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Rpm-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove oint') {
steps {
script {
// Удаляем oint, если он установлен
sh 'rpm -e oint || echo "oint not installed"'
}
}
}
stage('Download oint package') {
steps {
script {
// Скачиваем новый rpm-пакет oint
sh 'wget -O oint-2.0.0-1.noarch_ru.rpm https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/lastSuccessfulBuild/artifact/2.0.0/oint-2.0.0-1.noarch_ru.rpm '
}
}
}
stage('Install oint package') {
steps {
script {
// Устанавливаем скаченный пакет
sh 'rpm -ivh --replacepkgs oint-2.0.0-1.noarch_ru.rpm'
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/ru/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "CLI"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_Core.os', 'ПроверитьСоответствиеИБПоследнейСборке'],
['./src/ru/OInt/tests/Modules/OPItc_Core.os', 'ПроверитьРасширенныйВызов'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,229 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'windows'
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Decrypt Data') {
steps {
powershell encoding: 'UTF-8', script:'cd ./src/en/OInt; opm build; opm install oint-2.0.0.ospx; del oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
bat encoding: 'UTF-8', script:'gpg --quiet --batch --yes --decrypt --passphrase="%GPGKEY%" --output ./data.json ./data.json.gpg'
}
}
}
stage('Remove oint.bat if exists') {
steps {
powershell encoding: 'UTF-8', script: '''
$batFile = "D:/OneScript/bin/oint.bat"
if (Test-Path $batFile) {
Remove-Item -Path $batFile -Force
Write-Host "Файл oint.bat удален."
} else {
Write-Host "Файл oint.bat не найден, пропускаем удаление."
}
'''
// Проверяем, что файл действительно удален
powershell encoding: 'UTF-8', script: '''
$batFile = "D:/OneScript/bin/oint.bat"
if (Test-Path $batFile) {
Write-Error "Ошибка: Файл oint.bat не удален!"
exit 1
} else {
Write-Host "Проверка: oint.bat успешно удален или отсутствовал."
}
'''
}
}
stage('Uninstall OInt if installed') {
steps {
powershell encoding: 'UTF-8', script: '''
$uninstallerPath = "C:\\Program Files (x86)\\OInt\\unins000.exe"
if (Test-Path $uninstallerPath) {
Write-Host "OInt найден. Запускаем удаление..."
Start-Process -FilePath $uninstallerPath -ArgumentList "/VERYSILENT /NORESTART" -Wait
Write-Host "Удаление OInt завершено."
} else {
Write-Host "OInt не установлен. Пропускаем этап удаления."
}
'''
// Проверяем, что oint.bat в C:\Program Files (x86)\OInt\bin\oint.bat удален
powershell encoding: 'UTF-8', script: '''
$batFile = "C:\\Program Files (x86)\\OInt\\bin\\oint.bat"
if (Test-Path $batFile) {
Write-Error "Ошибка: oint.bat всё ещё существует после uninstall!"
exit 1
} else {
Write-Host "Проверка: oint.bat после uninstall отсутствует."
}
'''
}
}
stage('Prepare Download Dir') {
steps {
bat 'if not exist "%USERPROFILE%\\Downloads" mkdir "%USERPROFILE%\\Downloads"'
}
}
stage('Download Installer') {
steps {
powershell encoding: 'UTF-8', script: '''
$url = "https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/lastSuccessfulBuild/artifact/2.0.0/oint_2.0.0_installer_en.exe "
$output = "$env:USERPROFILE\\Downloads\\oint_installer.exe"
Invoke-WebRequest -Uri $url -OutFile $output
Write-Host "Инсталлер скачан в: $output"
'''
}
}
stage('Install OInt') {
steps {
powershell encoding: 'UTF-8', script: '''
$installerPath = "$env:USERPROFILE\\Downloads\\oint_installer.exe"
Write-Host "Запускаем установку: $installerPath"
Start-Process -FilePath $installerPath -ArgumentList "/VERYSILENT /NORESTART" -NoNewWindow -Wait
Write-Host "Установка завершена."
'''
}
}
stage('Verify Installation') {
steps {
// Проверяем наличие oint.bat в C:\Program Files (x86)\OInt\bin\
powershell encoding: 'UTF-8', script: '''
$batFile = "C:\\Program Files (x86)\\OInt\\bin\\oint.bat"
if (-not (Test-Path $batFile)) {
Write-Error "Ошибка: oint.bat не найден после установки!"
exit 1
} else {
Write-Host "Проверка: oint.bat найден после установки."
}
'''
// Проверяем, что where oint выводит нужный путь
powershell encoding: 'UTF-8', script: '''
$result = (Get-Command oint -ErrorAction SilentlyContinue).Source
$expectedPath = "C:\\Program Files (x86)\\OInt\\bin\\oint.bat"
if ($result -ne $expectedPath) {
Write-Error "Ошибка: Команда 'where oint' указывает не на тот путь: $result"
exit 1
} else {
Write-Host "Проверка: 'where oint' указывает на правильный путь: $result"
}
'''
}
}
stage('Create ReportPortal launch'){
steps{
bat encoding: 'UTF-8', script:'chcp 65001 & oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "CLI"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_Core.os', 'CheckIBToLastBuildCompliance'],
['./src/en/OInt/tests/Modules/OPItc_Core.os', 'ValidateAdvancedCall'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
bat "git config user.email vitaly.the.alpaca@gmail.com"
bat 'git config user.name "Vitaly the Alpaca (bot)"'
bat "git config --global core.ignorecase true"
bat "git add ."
bat 'git commit -m "Test data update (Jenkins)"'
bat "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,229 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'windows'
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Decrypt Data') {
steps {
powershell encoding: 'UTF-8', script:'cd ./src/ru/OInt; opm build; opm install oint-2.0.0.ospx; del oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
bat encoding: 'UTF-8', script:'gpg --quiet --batch --yes --decrypt --passphrase="%GPGKEY%" --output ./data.json ./data.json.gpg'
}
}
}
stage('Remove oint.bat if exists') {
steps {
powershell encoding: 'UTF-8', script: '''
$batFile = "D:/OneScript/bin/oint.bat"
if (Test-Path $batFile) {
Remove-Item -Path $batFile -Force
Write-Host "Файл oint.bat удален."
} else {
Write-Host "Файл oint.bat не найден, пропускаем удаление."
}
'''
// Проверяем, что файл действительно удален
powershell encoding: 'UTF-8', script: '''
$batFile = "D:/OneScript/bin/oint.bat"
if (Test-Path $batFile) {
Write-Error "Ошибка: Файл oint.bat не удален!"
exit 1
} else {
Write-Host "Проверка: oint.bat успешно удален или отсутствовал."
}
'''
}
}
stage('Uninstall OInt if installed') {
steps {
powershell encoding: 'UTF-8', script: '''
$uninstallerPath = "C:\\Program Files (x86)\\OInt\\unins000.exe"
if (Test-Path $uninstallerPath) {
Write-Host "OInt найден. Запускаем удаление..."
Start-Process -FilePath $uninstallerPath -ArgumentList "/VERYSILENT /NORESTART" -Wait
Write-Host "Удаление OInt завершено."
} else {
Write-Host "OInt не установлен. Пропускаем этап удаления."
}
'''
// Проверяем, что oint.bat в C:\Program Files (x86)\OInt\bin\oint.bat удален
powershell encoding: 'UTF-8', script: '''
$batFile = "C:\\Program Files (x86)\\OInt\\bin\\oint.bat"
if (Test-Path $batFile) {
Write-Error "Ошибка: oint.bat всё ещё существует после uninstall!"
exit 1
} else {
Write-Host "Проверка: oint.bat после uninstall отсутствует."
}
'''
}
}
stage('Prepare Download Dir') {
steps {
bat 'if not exist "%USERPROFILE%\\Downloads" mkdir "%USERPROFILE%\\Downloads"'
}
}
stage('Download Installer') {
steps {
powershell encoding: 'UTF-8', script: '''
$url = "https://jenkins.openintegrations.dev/job/OpiBuild/job/OpiRelease/lastSuccessfulBuild/artifact/2.0.0/oint_2.0.0_installer_ru.exe "
$output = "$env:USERPROFILE\\Downloads\\oint_installer.exe"
Invoke-WebRequest -Uri $url -OutFile $output
Write-Host "Инсталлер скачан в: $output"
'''
}
}
stage('Install OInt') {
steps {
powershell encoding: 'UTF-8', script: '''
$installerPath = "$env:USERPROFILE\\Downloads\\oint_installer.exe"
Write-Host "Запускаем установку: $installerPath"
Start-Process -FilePath $installerPath -ArgumentList "/VERYSILENT /NORESTART" -NoNewWindow -Wait
Write-Host "Установка завершена."
'''
}
}
stage('Verify Installation') {
steps {
// Проверяем наличие oint.bat в C:\Program Files (x86)\OInt\bin\
powershell encoding: 'UTF-8', script: '''
$batFile = "C:\\Program Files (x86)\\OInt\\bin\\oint.bat"
if (-not (Test-Path $batFile)) {
Write-Error "Ошибка: oint.bat не найден после установки!"
exit 1
} else {
Write-Host "Проверка: oint.bat найден после установки."
}
'''
// Проверяем, что where oint выводит нужный путь
powershell encoding: 'UTF-8', script: '''
$result = (Get-Command oint -ErrorAction SilentlyContinue).Source
$expectedPath = "C:\\Program Files (x86)\\OInt\\bin\\oint.bat"
if ($result -ne $expectedPath) {
Write-Error "Ошибка: Команда 'where oint' указывает не на тот путь: $result"
exit 1
} else {
Write-Host "Проверка: 'where oint' указывает на правильный путь: $result"
}
'''
}
}
stage('Create ReportPortal launch'){
steps{
bat encoding: 'UTF-8', script:'chcp 65001 & oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "CLI"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_Core.os', 'ПроверитьСоответствиеИБПоследнейСборке'],
['./src/ru/OInt/tests/Modules/OPItc_Core.os', 'ПроверитьРасширенныйВызов'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPItc_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
bat "git config user.email vitaly.the.alpaca@gmail.com"
bat 'git config user.name "Vitaly the Alpaca (bot)"'
bat "git config --global core.ignorecase true"
bat "git add ."
bat 'git commit -m "Test data update (Jenkins)"'
bat "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,159 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Deb-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove OInt from OneScript Lib') {
steps {
script {
try {
// Удаление каталога /opt/onescript/lib/oint, если существует
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Каталог oint найден. Удаляем..."
rm -rf "$DIR_PATH"
echo "Каталог oint успешно удален."
else
echo "Каталог oint не найден. Пропускаем удаление."
fi
'''
// Проверяем, что каталог действительно удален
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Ошибка: Каталог oint всё ещё существует после попытки удаления!"
exit 1
else
echo "Проверка: Каталог oint отсутствует после удаления."
fi
'''
} catch (Exception e) {
echo "Произошла ошибка при удалении каталога oint: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
error("Удаление каталога oint завершено с ошибкой.")
}
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/en/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "OneScript"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_Core.os', 'CheckIBToLastBuildCompliance'],
['./src/en/OInt/tests/Modules/OPIt_Core.os', 'ValidateAdvancedCall'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,159 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Deb-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove OInt from OneScript Lib') {
steps {
script {
try {
// Удаление каталога /opt/onescript/lib/oint, если существует
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Каталог oint найден. Удаляем..."
rm -rf "$DIR_PATH"
echo "Каталог oint успешно удален."
else
echo "Каталог oint не найден. Пропускаем удаление."
fi
'''
// Проверяем, что каталог действительно удален
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Ошибка: Каталог oint всё ещё существует после попытки удаления!"
exit 1
else
echo "Проверка: Каталог oint отсутствует после удаления."
fi
'''
} catch (Exception e) {
echo "Произошла ошибка при удалении каталога oint: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
error("Удаление каталога oint завершено с ошибкой.")
}
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/ru/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "OneScript"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_Core.os', 'ПроверитьСоответствиеИБПоследнейСборке'],
['./src/ru/OInt/tests/Modules/OPIt_Core.os', 'ПроверитьРасширенныйВызов'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,159 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Rpm-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove OInt from OneScript Lib') {
steps {
script {
try {
// Удаление каталога /opt/onescript/lib/oint, если существует
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Каталог oint найден. Удаляем..."
rm -rf "$DIR_PATH"
echo "Каталог oint успешно удален."
else
echo "Каталог oint не найден. Пропускаем удаление."
fi
'''
// Проверяем, что каталог действительно удален
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Ошибка: Каталог oint всё ещё существует после попытки удаления!"
exit 1
else
echo "Проверка: Каталог oint отсутствует после удаления."
fi
'''
} catch (Exception e) {
echo "Произошла ошибка при удалении каталога oint: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
error("Удаление каталога oint завершено с ошибкой.")
}
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/en/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "OneScript"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_Core.os', 'CheckIBToLastBuildCompliance'],
['./src/en/OInt/tests/Modules/OPIt_Core.os', 'ValidateAdvancedCall'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,159 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'Rpm-Agent' // Имя или метка агента
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove OInt from OneScript Lib') {
steps {
script {
try {
// Удаление каталога /opt/onescript/lib/oint, если существует
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Каталог oint найден. Удаляем..."
rm -rf "$DIR_PATH"
echo "Каталог oint успешно удален."
else
echo "Каталог oint не найден. Пропускаем удаление."
fi
'''
// Проверяем, что каталог действительно удален
sh '''
DIR_PATH="/opt/onescript/lib/oint"
if [ -d "$DIR_PATH" ]; then
echo "Ошибка: Каталог oint всё ещё существует после попытки удаления!"
exit 1
else
echo "Проверка: Каталог oint отсутствует после удаления."
fi
'''
} catch (Exception e) {
echo "Произошла ошибка при удалении каталога oint: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
error("Удаление каталога oint завершено с ошибкой.")
}
}
}
}
stage('Prepare'){
steps{
sh 'cd ./src/ru/OInt && opm build && opm install oint-2.0.0.ospx && rm oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
sh 'gpg --quiet --batch --yes --decrypt --passphrase="$GPGKEY" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
sh 'oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "OneScript"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_Core.os', 'ПроверитьСоответствиеИБПоследнейСборке'],
['./src/ru/OInt/tests/Modules/OPIt_Core.os', 'ПроверитьРасширенныйВызов'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
sh "git config user.email vitaly.the.alpaca@gmail.com"
sh 'git config user.name "Vitaly the Alpaca (bot)"'
sh "git config --global core.ignorecase true"
sh "git add ."
sh 'git commit -m "Test data update (Jenkins)"'
sh "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,156 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'windows'
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove OInt from OneScript Lib') {
steps {
script {
try {
// Удаление каталога C:\Program Files\OneScript\lib\oint, если существует
powershell encoding: 'UTF-8', script: '''
$dirPath = "D:/OneScript/lib/oint"
if (Test-Path $dirPath) {
Write-Host "Каталог oint найден. Удаляем..."
Remove-Item -Path $dirPath -Recurse -Force
Write-Host "Каталог oint успешно удален."
} else {
Write-Host "Каталог oint не найден. Пропускаем удаление."
}
'''
// Проверяем, что каталог действительно удален
powershell encoding: 'UTF-8', script: '''
$dirPath = "D:/OneScript/lib/oint"
if (Test-Path $dirPath) {
Write-Error "Ошибка: Каталог oint всё ещё существует после попытки удаления!"
exit 1
} else {
Write-Host "Проверка: Каталог oint отсутствует после удаления."
}
'''
} catch (Exception e) {
echo "Произошла ошибка при удалении каталога oint: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
error("Удаление каталога oint завершено с ошибкой.")
}
}
}
}
stage('Build OInt from source and decrypt secret data'){
steps{
powershell encoding: 'UTF-8', script:'cd ./src/en/OInt; opm build; opm install oint-2.0.0.ospx; del oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
bat encoding: 'UTF-8', script:'gpg --quiet --batch --yes --decrypt --passphrase="%GPGKEY%" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
bat encoding: 'UTF-8', script:'chcp 65001 & oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "OneScript"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_Core.os', 'CheckIBToLastBuildCompliance'],
['./src/en/OInt/tests/Modules/OPIt_Core.os', 'ValidateAdvancedCall'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/en/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Client'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
bat "git config user.email vitaly.the.alpaca@gmail.com"
bat 'git config user.name "Vitaly the Alpaca (bot)"'
bat "git config --global core.ignorecase true"
bat "git add ."
bat 'git commit -m "Test data update (Jenkins)"'
bat "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
@@ -0,0 +1,156 @@
def runCommand(String command) {
if (isUnix()) {
sh(script: command)
} else {
bat(script: command)
}
}
pipeline {
agent {
label 'windows'
}
stages {
stage('Read stages config') {
steps {
script {
def configText = readFile './service/tests_config.json'
env.STAGES_CONFIG = configText
}
}
}
stage('Remove OInt from OneScript Lib') {
steps {
script {
try {
// Удаление каталога C:\Program Files\OneScript\lib\oint, если существует
powershell encoding: 'UTF-8', script: '''
$dirPath = "D:/OneScript/lib/oint"
if (Test-Path $dirPath) {
Write-Host "Каталог oint найден. Удаляем..."
Remove-Item -Path $dirPath -Recurse -Force
Write-Host "Каталог oint успешно удален."
} else {
Write-Host "Каталог oint не найден. Пропускаем удаление."
}
'''
// Проверяем, что каталог действительно удален
powershell encoding: 'UTF-8', script: '''
$dirPath = "D:/OneScript/lib/oint"
if (Test-Path $dirPath) {
Write-Error "Ошибка: Каталог oint всё ещё существует после попытки удаления!"
exit 1
} else {
Write-Host "Проверка: Каталог oint отсутствует после удаления."
}
'''
} catch (Exception e) {
echo "Произошла ошибка при удалении каталога oint: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
error("Удаление каталога oint завершено с ошибкой.")
}
}
}
}
stage('Build OInt from source and decrypt secret data'){
steps{
powershell encoding: 'UTF-8', script:'cd ./src/ru/OInt; opm build; opm install oint-2.0.0.ospx; del oint-2.0.0.ospx'
withCredentials([string(credentialsId: 'gpgkey', variable: 'GPGKEY')]) {
bat encoding: 'UTF-8', script:'gpg --quiet --batch --yes --decrypt --passphrase="%GPGKEY%" --output ./data.json ./data.json.gpg'
}
}
}
stage('Create ReportPortal launch'){
steps{
bat encoding: 'UTF-8', script:'chcp 65001 & oscript ./ci/os/internal/Classes/ReportPortalMethods.os start "OneScript"'
}
}
stage('Testing-Core') {
when {
expression { return shouldRunStage('Core') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_Core.os', 'ПроверитьСоответствиеИБПоследнейСборке'],
['./src/ru/OInt/tests/Modules/OPIt_Core.os', 'ПроверитьРасширенныйВызов'],
]
for (test in tests) {
runLibraryTest(test[0], test[1])
}
}
}
}
stage('Testing-WebSocket') {
when {
expression { return shouldRunStage('WebSocket') }
}
steps {
script {
def tests = [
['./src/ru/OInt/tests/Modules/OPIt_WebSocket.os', 'WS_Клиент'],
]
for (test in tests) {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
runLibraryTest(test[0], test[1])
}
}
}
}
}
}
post{
always{
script {
catchError() {
runCommand('oscript ./ci/os/internal/Classes/ReportPortalMethods.os stop')
}
withCredentials([gitUsernamePassword(credentialsId: 'gitmain', gitToolName: 'Default')]) {
bat "git config user.email vitaly.the.alpaca@gmail.com"
bat 'git config user.name "Vitaly the Alpaca (bot)"'
bat "git config --global core.ignorecase true"
bat "git add ."
bat 'git commit -m "Test data update (Jenkins)"'
bat "git push origin HEAD:main"
}
}
}
}
}
def shouldRunStage(stageName) {
try {
if (!env.STAGES_CONFIG) {
echo "[WARN] STAGES_CONFIG not set. Assuming stage '${stageName}' is ENABLED."
return true
}
def config = readJSON text: env.STAGES_CONFIG
def value = config[stageName]
if (value == null) {
echo "[WARN] Stage '${stageName}' not found in config. Defaulting to DISABLED."
return false
}
return value == true
} catch (Exception e) {
echo "[ERROR] Failed to parse STAGES_CONFIG: ${e.message}"
echo "Raw config: ${env.STAGES_CONFIG}"
// Решите: включать stage по умолчанию или нет?
return false // или true — по вашему усмотрению
}
}
def runLibraryTest(String configPath, String libraryName) {
try {
echo "Executing: 1testrunner -run \"${configPath}\" \"${libraryName}\""
runCommand("1testrunner -run \"${configPath}\" \"${libraryName}\"")
echo "Test ${libraryName} completed successfully"
} catch (Exception e) {
echo "ERROR in test ${libraryName}: ${e.getMessage()}"
throw e
}
}
+3 -1
View File
@@ -17,11 +17,13 @@ import Admonition from '@theme/Admonition';
<Tabs>
<TabItem value="params" label="Parameters" default>
`Function CloseConnection(Val Connection) Export`
`Function CloseConnection(Val Connection, Val Code = 1000, Val Reason = "") Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Connection | - | Arbitrary | &#x2714; | Connection, See CreateConnection |
| Code | - | Number | &#x2716; | Status code |
| Reason | - | String | &#x2716; | Close message |
<div className="return-value-note">
+2 -1
View File
@@ -17,13 +17,14 @@ import Admonition from '@theme/Admonition';
<Tabs>
<TabItem value="params" label="Parameters" default>
`Function CreateConnection(Val Address, Val Tls = Undefined, Val Proxy = Undefined, Val Logging = Undefined) Export`
`Function CreateConnection(Val Address, Val Tls = Undefined, Val Proxy = Undefined, Val Headers = Undefined, Val Logging = Undefined) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Address | - | String | &#x2714; | Address and port |
| Tls | - | Structure Of KeyAndValue | &#x2716; | TLS settings, if necessary. See GetTlsSettings |
| Proxy | - | Structure Of KeyAndValue | &#x2716; | Proxy settings, if required. See GetProxySettings |
| Headers | - | Map Of KeyAndValue | &#x2716; | Map of additional HTTP headers for handshake |
| Logging | - | Structure Of KeyAndValue | &#x2716; | Logging settings. See GetLoggingSettings |
+1 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 3
sidebar_position: 5
description: Get message and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
+1 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 8
sidebar_class_name: doc-no-cli
description: Get TLS settings and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
+1 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 7
sidebar_position: 9
sidebar_class_name: doc-no-cli
description: Is client object and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
@@ -1,5 +1,5 @@
---
sidebar_position: 5
sidebar_position: 7
description: Send binary message and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
+50
View File
@@ -0,0 +1,50 @@
---
sidebar_position: 3
description: Send ping and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import Admonition from '@theme/Admonition';
# Send ping
Sends a ping to the remote server
<Tabs>
<TabItem value="params" label="Parameters" default>
`Function SendPing(Val Connection) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Connection | --conn | Arbitrary | &#x2714; | Connection, See CreateConnection |
<div className="return-value-note">
<div className="return-value-note__title">Returns</div>
<div className="return-value-note__value">
Map Of KeyAndValue - Execution result
</div>
</div>
</TabItem>
<TabItem value="extended" label={<span>Advanced call{' '}<a href="/docs/Start/Advanced-call" target="_blank" rel="noreferrer" title="About advanced call" onClick={(e) => e.stopPropagation()}>?</a></span>}>
*This method has no additional advanced call parameters.*
</TabItem>
</Tabs>
+50
View File
@@ -0,0 +1,50 @@
---
sidebar_position: 4
description: Send pong and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import Admonition from '@theme/Admonition';
# Send pong
Sends a pong to the remote server
<Tabs>
<TabItem value="params" label="Parameters" default>
`Function SendPong(Val Connection) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Connection | --conn | Arbitrary | &#x2714; | Connection, See CreateConnection |
<div className="return-value-note">
<div className="return-value-note__title">Returns</div>
<div className="return-value-note__value">
Map Of KeyAndValue - Execution result
</div>
</div>
</TabItem>
<TabItem value="extended" label={<span>Advanced call{' '}<a href="/docs/Start/Advanced-call" target="_blank" rel="noreferrer" title="About advanced call" onClick={(e) => e.stopPropagation()}>?</a></span>}>
*This method has no additional advanced call parameters.*
</TabItem>
</Tabs>
+1 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 4
sidebar_position: 6
description: Send text message and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
@@ -1,5 +1,5 @@
---
sidebar_position: 8
sidebar_position: 2
sidebar_class_name: doc-no-cli
description: Get log and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
@@ -21,7 +21,7 @@ import Admonition from '@theme/Admonition';
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| ServerObject | - | Arbitrary | &#x2714; | Object of running server component |
| ServerObject | - | Arbitrary | &#x2714; | Server or client component object |
| AsString | - | Boolean | &#x2716; | True > returns log as a single string, False > as an array |
| EventCount | - | Number | &#x2716; | Number of recent events to retrieve. 0 > no limits |
+1 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 9
sidebar_position: 8
sidebar_class_name: doc-no-cli
description: Is server object and other functions to work with WebSocket in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, WebSocket]
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1 @@
{"Постфикс":""}
@@ -0,0 +1,10 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ЗакрытьСоединение(Соединение);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЗакрытьСоединение", Постфикс);
@@ -0,0 +1,8 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
OPI_ПолучениеДанныхТестов.Обработать(Соединение, "WebSocket", "ОткрытьСоединение", Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
@@ -0,0 +1,19 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
ИсходнаяСтрока = "binary-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Данные = ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьДвоичноеСообщение(Соединение, Данные);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьДвоичноеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьДвоичноеСообщение", "Проверка, " + Постфикс, ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
@@ -0,0 +1,17 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьПинг(Соединение);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПинг", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьПинг", "Проверка, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
@@ -0,0 +1,14 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьПонг(Соединение);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПонг", Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
@@ -0,0 +1,18 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "text-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьТекстовоеСообщение(Соединение, Сообщение);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьТекстовоеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьТекстовоеСообщение", "Проверка, " + Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
@@ -0,0 +1,4 @@
Постфикс = "";
Результат = OPI_WebSocket.ПолучитьНастройкиTls(Истина);
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьНастройкиTls", Постфикс);
@@ -0,0 +1,15 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "echo-text-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьСообщение", Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
@@ -0,0 +1,17 @@
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ЭтоОбъектКлиента(Соединение);
Иначе
Результат = OPI_WebSocket.ЭтоОбъектКлиента("not-a-client");
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЭтоОбъектКлиента", Постфикс);
Результат = OPI_WebSocket.ЭтоОбъектКлиента("not-a-client");
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЭтоОбъектКлиента", "Ложь, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
+14 -1
View File
@@ -17,11 +17,13 @@ import Admonition from '@theme/Admonition';
<Tabs>
<TabItem value="params" label="Параметры" default>
`Функция ЗакрытьСоединение(Знач Соединение) Экспорт`
`Функция ЗакрытьСоединение(Знач Соединение, Знач Код = 1000, Знач Причина = "") Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Соединение | - | Произвольный | &#x2714; | Соединение, См. [`ОткрытьСоединение`](/docs/WebSocket/Client-methods/Create-connection) |
| Код | - | Число | &#x2716; | Код состояния |
| Причина | - | Строка | &#x2716; | Текстовое сообщение при закрытии |
<div className="return-value-note">
@@ -49,7 +51,18 @@ import Admonition from '@theme/Admonition';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ЗакрытьСоединение(Соединение);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЗакрытьСоединение", Постфикс);
```
+11 -1
View File
@@ -17,13 +17,14 @@ import Admonition from '@theme/Admonition';
<Tabs>
<TabItem value="params" label="Параметры" default>
`Функция ОткрытьСоединение(Знач Адрес, Знач Tls = Неопределено, Знач Прокси = Неопределено, Знач Логирование = Неопределено) Экспорт`
`Функция ОткрытьСоединение(Знач Адрес, Знач Tls = Неопределено, Знач Прокси = Неопределено, Знач Заголовки = Неопределено, Знач Логирование = Неопределено) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Адрес | - | Строка | &#x2714; | Адрес и порт для подключения |
| Tls | - | Структура Из КлючИЗначение | &#x2716; | Настройки TLS, если необходимо. См. [`ПолучитьНастройкиTls`](/docs/WebSocket/Client-methods/Get-tls-settings) |
| Прокси | - | Структура Из КлючИЗначение | &#x2716; | Настройки прокси, если необходимо. См. ПолучитьНастройкиПрокси |
| Заголовки | - | Соответствие Из КлючИЗначение | &#x2716; | Соответствие дополнительных HTTP заголовков для handshake |
| Логирование | - | Структура Из КлючИЗначение | &#x2716; | Настройки логирования. См. [`ПолучитьНастройкиЛогирования`](/docs/WebSocket/Common/Get-logging-settings) |
@@ -52,7 +53,16 @@ import Admonition from '@theme/Admonition';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
OPI_ПолучениеДанныхТестов.Обработать(Соединение, "WebSocket", "ОткрытьСоединение", Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
+17 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 3
sidebar_position: 5
description: Получить сообщение и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
@@ -43,7 +43,23 @@ import Admonition from '@theme/Admonition';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "echo-text-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьСообщение", Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
+6 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 8
sidebar_class_name: doc-no-cli
description: Получить настройки TLS и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
@@ -53,7 +53,12 @@ import Admonition from '@theme/Admonition';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Результат = OPI_WebSocket.ПолучитьНастройкиTls(Истина);
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьНастройкиTls", Постфикс);
```
+19 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 7
sidebar_position: 9
sidebar_class_name: doc-no-cli
description: Это объект клиента и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
@@ -49,7 +49,25 @@ import Admonition from '@theme/Admonition';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ЭтоОбъектКлиента(Соединение);
Иначе
Результат = OPI_WebSocket.ЭтоОбъектКлиента("not-a-client");
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЭтоОбъектКлиента", Постфикс);
Результат = OPI_WebSocket.ЭтоОбъектКлиента("not-a-client");
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЭтоОбъектКлиента", "Ложь, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
+21 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 5
sidebar_position: 7
description: Отправить двоичное сообщение и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
@@ -47,7 +47,27 @@ import Admonition from '@theme/Admonition';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
ИсходнаяСтрока = "binary-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Данные = ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьДвоичноеСообщение(Соединение, Данные);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьДвоичноеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьДвоичноеСообщение", "Проверка, " + Постфикс, ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
+68
View File
@@ -0,0 +1,68 @@
---
sidebar_position: 3
description: Отправить пинг и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import Admonition from '@theme/Admonition';
# Отправить пинг
Отправляет пинг удаленному серверу
<Tabs>
<TabItem value="params" label="Параметры" default>
`Функция ОтправитьПинг(Знач Соединение) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Соединение | --conn | Произвольный | &#x2714; | Соединение, См. [`ОткрытьСоединение`](/docs/WebSocket/Client-methods/Create-connection) |
<div className="return-value-note">
<div className="return-value-note__title">Возвращаемое значение</div>
<div className="return-value-note__value">
Соответствие Из КлючИЗначение - Результат выполнения
</div>
</div>
</TabItem>
<TabItem value="extended" label={<span>Расширенный вызов{' '}<a href="/docs/Start/Advanced-call" target="_blank" rel="noreferrer" title="Справка о расширенном вызове" onClick={(e) => e.stopPropagation()}>?</a></span>}>
*Для текущего метода нет дополнительных параметров расширенного вызова.*
</TabItem>
</Tabs>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьПинг(Соединение);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПинг", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьПинг", "Проверка, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
+65
View File
@@ -0,0 +1,65 @@
---
sidebar_position: 4
description: Отправить понг и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import Admonition from '@theme/Admonition';
# Отправить понг
Отправляет понг удаленному серверу
<Tabs>
<TabItem value="params" label="Параметры" default>
`Функция ОтправитьПонг(Знач Соединение) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Соединение | --conn | Произвольный | &#x2714; | Соединение, См. [`ОткрытьСоединение`](/docs/WebSocket/Client-methods/Create-connection) |
<div className="return-value-note">
<div className="return-value-note__title">Возвращаемое значение</div>
<div className="return-value-note__value">
Соответствие Из КлючИЗначение - Результат выполнения
</div>
</div>
</TabItem>
<TabItem value="extended" label={<span>Расширенный вызов{' '}<a href="/docs/Start/Advanced-call" target="_blank" rel="noreferrer" title="Справка о расширенном вызове" onClick={(e) => e.stopPropagation()}>?</a></span>}>
*Для текущего метода нет дополнительных параметров расширенного вызова.*
</TabItem>
</Tabs>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьПонг(Соединение);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПонг", Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
+20 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 4
sidebar_position: 6
description: Отправить текстовое сообщение и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
@@ -43,7 +43,26 @@ import Admonition from '@theme/Admonition';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Постфикс = "";
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "text-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьТекстовоеСообщение(Соединение, Сообщение);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьТекстовоеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьТекстовоеСообщение", "Проверка, " + Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
```
@@ -1,5 +1,5 @@
---
sidebar_position: 8
sidebar_position: 2
sidebar_class_name: doc-no-cli
description: Получить лог и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
@@ -21,7 +21,7 @@ import Admonition from '@theme/Admonition';
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| ОбъектСервера | - | Произвольный | &#x2714; | Объект компоненты запущенного сервера |
| ОбъектСервера | - | Произвольный | &#x2714; | Объект компоненты сервера или клиента |
| КакСтрока | - | Булево | &#x2716; | Истина > возвращает лог одной строкой, Ложь > как массив |
| ЧислоСобытий | - | Число | &#x2716; | Число последних событий для получения. 0 > без ограничений |
+1 -1
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 9
sidebar_position: 8
sidebar_class_name: doc-no-cli
description: Это объект сервера и другие функции для работы с WebSocket в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, WebSocket]
+10825 -10825
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349
C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B
+28
View File
@@ -0,0 +1,28 @@
{
"reportPath": "./test_results/WebSocket.report",
"closeAfterTests": true,
"filter": {
"extensions": null,
"modules": null,
"suites": null,
"tags": null,
"contexts": null,
"paths": null,
"tests": [
"OPIt_WebSocket.WS_Client"
]
},
"settings": {
"ВТранзакции": false
},
"reportFormat": "dumpjson",
"showReport": false,
"logging": {
"file": "",
"console": false,
"enable": null,
"level": "info"
},
"exitCode": "./test_results/WebSocket.code",
"ПодключатьВнешниеКомпоненты": true
}
+28
View File
@@ -0,0 +1,28 @@
{
"reportPath": "./test_results/WebSocket.report",
"closeAfterTests": true,
"filter": {
"extensions": null,
"modules": null,
"suites": null,
"tags": null,
"contexts": null,
"paths": null,
"tests": [
"OPIt_WebSocket.WS_Клиент"
]
},
"settings": {
"ВТранзакции": false
},
"reportFormat": "dumpjson",
"showReport": false,
"logging": {
"file": "",
"console": false,
"enable": null,
"level": "info"
},
"exitCode": "./test_results/WebSocket.code",
"ПодключатьВнешниеКомпоненты": true
}
@@ -93,33 +93,13 @@ Function FileTransferRequired() Export
EndFunction
Function GetLoggingSettings(Val WriteToMemory = True
, Val MaxEvents = 300
, Val FilePath = "") Export
Function NotAddinParameterError() Export
OPI_TypeConversion.GetBoolean(WriteToMemory);
OPI_TypeConversion.GetLine(FilePath);
OPI_TypeConversion.GetNumber(MaxEvents);
Result = New Map;
Result.Insert("result", False);
Result.Insert("error" , "The passed value is not an AddIn object");
SettingsStructure = New Structure;
WriteToFile = ValueIsFilled(FilePath);
If WriteToMemory Then
SettingsStructure.Insert("mode" , "memory");
SettingsStructure.Insert("max_entries", MaxEvents);
EndIf;
If WriteToFile Then
SettingsStructure.Insert("mode" , "file");
SettingsStructure.Insert("file_path", FilePath);
EndIf;
If WriteToFile And WriteToMemory Then
SettingsStructure.Insert("mode", "both");
EndIf;
//@skip-check constructor-function-return-section
Return SettingsStructure;
Return Result;
EndFunction
@@ -250,6 +230,60 @@ EndFunction
#EndRegion
#Region Logging
Function GetLoggingSettings(Val WriteToMemory = True
, Val MaxEvents = 300
, Val FilePath = "") Export
OPI_TypeConversion.GetBoolean(WriteToMemory);
OPI_TypeConversion.GetLine(FilePath);
OPI_TypeConversion.GetNumber(MaxEvents);
SettingsStructure = New Structure;
WriteToFile = ValueIsFilled(FilePath);
If WriteToMemory Then
SettingsStructure.Insert("mode" , "memory");
SettingsStructure.Insert("max_entries", MaxEvents);
EndIf;
If WriteToFile Then
SettingsStructure.Insert("mode" , "file");
SettingsStructure.Insert("file_path", FilePath);
EndIf;
If WriteToFile And WriteToMemory Then
SettingsStructure.Insert("mode", "both");
EndIf;
//@skip-check constructor-function-return-section
Return SettingsStructure;
EndFunction
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
If Not IsAddIn(ServerObject) Then
Return NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(EventCount);
OPI_TypeConversion.GetBoolean(AsString);
Result = ServerObject.GetLogs(EventCount);
Result = OPI_Tools.JsonToStructure(Result);
If AsString And Result["result"] Then
Result = StrConcat(Result["logs"], Chars.LF);
EndIf;
Return Result;
EndFunction
#EndRegion
#EndRegion
#Region Private
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349";
LastBuildHash = "C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B";
Return LastBuildHash;
@@ -77,7 +77,7 @@ Function StopServer(Val Module, Val ServerObject) Export
If Not Module.IsServerObject(ServerObject) Then
Result = NotAddinParameterError();
Result = OPI_AddIns.NotAddinParameterError();
Else
@@ -96,7 +96,7 @@ Function GetNextConnectionData(Val Module
, Val MaxSize = 8192) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(Timeout);
@@ -118,7 +118,7 @@ Function GetConnectionData(Val Module
, Val MaxSize = 8192) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(Timeout);
@@ -137,7 +137,7 @@ EndFunction
Function SendData(Val Module, Val ServerObject, Val ConnectionID, Val Data) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetBinaryData(Data, True, False);
@@ -153,7 +153,7 @@ EndFunction
Function CloseIncomingConnection(Val Module, Val ServerObject, Val ConnectionID) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetLine(ConnectionID);
@@ -168,7 +168,7 @@ EndFunction
Function CompleteSend(Val Module, Val ServerObject, Val ConnectionID) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetLine(ConnectionID);
@@ -183,7 +183,7 @@ EndFunction
Function FinishReceiving(Val Module, Val ServerObject, Val ConnectionID) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetLine(ConnectionID);
@@ -198,7 +198,7 @@ EndFunction
Function GetConnectionList(Val Module, Val ServerObject) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
Result = ServerObject.GetConnectionsList();
@@ -208,40 +208,10 @@ Function GetConnectionList(Val Module, Val ServerObject) Export
EndFunction
Function GetLog(Val Module, Val ServerObject, Val AsString = False, Val EventCount = 100) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(EventCount);
OPI_TypeConversion.GetBoolean(AsString);
Result = ServerObject.GetLogs(EventCount);
Result = OPI_Tools.JsonToStructure(Result);
If AsString And Result["result"] Then
Result = StrConcat(Result["logs"], Chars.LF);
EndIf;
Return Result;
EndFunction
#EndRegion
#Region Internal
Function NotAddinParameterError()
Result = New Map;
Result.Insert("result", False);
Result.Insert("error" , "The passed value is not a server object");
Return Result;
EndFunction
Procedure CompleteMessageWithVaultData(Val ServerObject, MessageStructure)
DataKey = Undefined;
@@ -561,8 +561,7 @@ EndFunction
// String, Map Of KeyAndValue - Log as a string or a map with the full execution result
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
Return OPI_GenericServer.GetLog(OPI_TCP
, ServerObject
Return OPI_AddIns.GetLog(ServerObject
, AsString
, EventCount);
@@ -72,6 +72,24 @@ Function GetLoggingSettings(Val WriteToMemory = True
EndFunction
// Get log !NOCLI
// Retrieves server log data (with logging to memory enabled)
//
// Parameters:
// ServerObject - Arbitrary - Server or client component object - srv
// AsString - Boolean - True > returns log as a single string, False > as an array - str
// EventCount - Number - Number of recent events to retrieve. 0 > no limits - count
//
// Returns:
// String, Map Of KeyAndValue - Log as a string or a map with the full execution result
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
Return OPI_AddIns.GetLog(ServerObject
, AsString
, EventCount);
EndFunction
#EndRegion
#Region ClientMethods
@@ -83,6 +101,7 @@ EndFunction
// Address - String - Address and port - address
// Tls - Structure Of KeyAndValue - TLS settings, if necessary. See GetTlsSettings - tls
// Proxy - Structure Of KeyAndValue - Proxy settings, if required. See GetProxySettings - proxy
// Headers - Map Of KeyAndValue - Map of additional HTTP headers for handshake - headers
// Logging - Structure Of KeyAndValue - Logging settings. See GetLoggingSettings - log
//
// Returns:
@@ -90,6 +109,7 @@ EndFunction
Function CreateConnection(Val Address
, Val Tls = Undefined
, Val Proxy = Undefined
, Val Headers = Undefined
, Val Logging = Undefined) Export
OPI_TypeConversion.GetLine(Address);
@@ -128,6 +148,20 @@ Function CreateConnection(Val Address
EndIf;
If ValueIsFilled(Headers) Then
ErrorText = "Incorrect header structure";
OPI_TypeConversion.GetKeyValueCollection(Headers, ErrorText);
HeadersAsString = OPI_Tools.JSONString(Headers);
Result = WSClient.SetHeaders(HeadersAsString);
If Not OPI_Tools.GetOr(Result, "result", False) Then
Return Result;
EndIf;
EndIf;
Result = WSClient.Connect(Address, SettingsString);
Result = OPI_Tools.JsonToStructure(Result);
@@ -140,14 +174,19 @@ EndFunction
//
// Parameters:
// Connection - Arbitrary - Connection, See CreateConnection - conn
// Code - Number - Status code - code
// Reason - String - Close message - reason
//
// Returns:
// Structure Of KeyAndValue - Result of connection termination
Function CloseConnection(Val Connection) Export
Function CloseConnection(Val Connection, Val Code = 1000, Val Reason = "") Export
If IsClientObject(Connection) Then
Result = Connection.Disconnect();
OPI_TypeConversion.GetNumber(Code);
OPI_TypeConversion.GetLine(Reason);
Result = Connection.Close(Code, Reason);
Result = OPI_Tools.JsonToStructure(Result, False);
Else
@@ -161,6 +200,60 @@ Function CloseConnection(Val Connection) Export
EndFunction
// Send ping
// Sends a ping to the remote server
//
// Parameters:
// Connection - Arbitrary - Connection, See CreateConnection - conn
//
// Returns:
// Map Of KeyAndValue - Execution result
Function SendPing(Val Connection) Export
If Not IsClientObject(Connection) Then
ErrorMap = New Map;
ErrorMap.Insert("result", False);
ErrorMap.Insert("error" , "Implicit connection opening is senseless in this case");
Return ErrorMap;
EndIf;
Result = Connection.SendPing();
Result = OPI_Tools.JsonToStructure(Result);
Return Result;
EndFunction
// Send pong
// Sends a pong to the remote server
//
// Parameters:
// Connection - Arbitrary - Connection, See CreateConnection - conn
//
// Returns:
// Map Of KeyAndValue - Execution result
Function SendPong(Val Connection) Export
If Not IsClientObject(Connection) Then
ErrorMap = New Map;
ErrorMap.Insert("result", False);
ErrorMap.Insert("error" , "Implicit connection opening is senseless in this case");
Return ErrorMap;
EndIf;
Result = Connection.SendPong();
Result = OPI_Tools.JsonToStructure(Result);
Return Result;
EndFunction
// Get message
// Receives an incoming message from the queue or waits for a new one
//
@@ -185,6 +278,17 @@ Function GetMessage(Val Connection, Val Timeout = 10000) Export
OPI_TypeConversion.GetNumber(Timeout);
Result = Connection.ReceiveMessage(Timeout);
Result = OPI_Tools.JsonToStructure(Result);
If OPI_Tools.GetOr(Result, "type", "") = "binary" Then
Data = OPI_Tools.GetOr(Result, "data", "");
If ValueIsFilled(Data) Then
Result.Insert("data", OPI_AddIns.ReceiveData(Connection, Data));
EndIf;
EndIf;
Return Result;
@@ -408,25 +512,6 @@ Function GetConnectionList(Val ServerObject) Export
EndFunction
// Get log !NOCLI
// Retrieves server log data (with logging to memory enabled)
//
// Parameters:
// ServerObject - Arbitrary - Object of running server component - srv
// AsString - Boolean - True > returns log as a single string, False > as an array - str
// EventCount - Number - Number of recent events to retrieve. 0 > no limits - count
//
// Returns:
// String, Map Of KeyAndValue - Log as a string or a map with the full execution result
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
Return OPI_GenericServer.GetLog(OPI_WebSocket
, ServerObject
, AsString
, EventCount);
EndFunction
// Is server object !NOCLI
// Checks that the value is an object of the TCP server external component
//
@@ -154,6 +154,7 @@ Function GetTestingSectionMapping() Export
Sections.Insert("YandexMetrika" , 5);
Sections.Insert("S3" , 5);
Sections.Insert("TCP" , 5);
Sections.Insert("WebSocket" , 5);
Sections.Insert("GreenAPI" , 5);
Sections.Insert("GreenMax" , 5);
Sections.Insert("Ollama" , 5);
@@ -189,6 +190,7 @@ Function GetTestTable(Val TestModule = "") Export
Metrika = "YandexMetrika";
S3_ = "S3";
TCP = "TCP";
WebSocket = "WebSocket";
SQLite = "SQLite";
Postgres = "PostgreSQL";
MongoDB = "MongoDB";
@@ -336,6 +338,7 @@ Function GetTestTable(Val TestModule = "") Export
NewTest(TestTable, "AWS_BucketsManagement" , "Buckets management" , S3_);
NewTest(TestTable, "AWS_ObjectsManagement" , "Objects management" , S3_);
NewTest(TestTable, "TC_Client" , "TCP Client" , TCP);
NewTest(TestTable, "WS_Client" , "WebSocket Client" , WebSocket);
NewTest(TestTable, "TC_Server" , "TCP Host" , TCP);
NewTest(TestTable, "SQLL_CommonMethods" , "Common methods" , SQLite);
NewTest(TestTable, "SQLL_ORM" , "ORM" , SQLite);
@@ -990,6 +993,85 @@ Function GetFTPParameterOptions() Export
EndFunction
Function GetWebSocketParametersOptions() Export
OptionArray = New Array;
TestParametersMain = New Structure;
ParameterToCollection("WS_IP" , TestParametersMain);
ParameterToCollection("WS_Port" , TestParametersMain);
ParameterToCollection("WSS_IP" , TestParametersMain);
ParameterToCollection("WSS_Port" , TestParametersMain);
ParameterToCollection("Proxy_User" , TestParametersMain);
ParameterToCollection("Proxy_Password", TestParametersMain);
ParameterToCollection("Socks5_IP" , TestParametersMain);
ParameterToCollection("Socks5_Port" , TestParametersMain);
Localhost = GetLocalhost();
Socks5IP = TestParametersMain["Socks5_IP"];
TestParametersMain["Socks5_IP"] = ?(Socks5IP = "127.0.0.1", Localhost, Socks5IP);
// WS
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WS");
ParametersStructure.Insert("WS_IP", Localhost);
ParametersStructure.Insert("WS_Port", TestParametersMain["WS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", False);
ParametersStructure.Insert("TLS", False);
OptionArray.Add(ParametersStructure);
// WSS
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WSS");
ParametersStructure.Insert("WS_IP", Localhost);
ParametersStructure.Insert("WS_Port", TestParametersMain["WSS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", False);
ParametersStructure.Insert("TLS", True);
OptionArray.Add(ParametersStructure);
// WS + Socks5
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WS, Socks5");
ParametersStructure.Insert("WS_IP", TestParametersMain["WS_IP"]);
ParametersStructure.Insert("WS_Port", TestParametersMain["WS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", True);
ParametersStructure.Insert("TLS", False);
OptionArray.Add(ParametersStructure);
// WSS + Socks5
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WSS, Socks5");
ParametersStructure.Insert("WS_IP", TestParametersMain["WSS_IP"]);
ParametersStructure.Insert("WS_Port", TestParametersMain["WSS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", True);
ParametersStructure.Insert("TLS", True);
OptionArray.Add(ParametersStructure);
Return OptionArray;
EndFunction
Function GetSSHParameterOptions() Export
OptionArray = New Array;
@@ -7694,6 +7776,109 @@ Function Check_TCP_IsServerObject(Val Result, Val Option)
EndFunction
Function Check_WebSocket_CreateConnection(Val Result, Val Option)
Result = String(TypeOf(Result));
ExpectsThat(Result).Равно("AddIn.OPI_WSClient.Main");
Return Result;
EndFunction
Function Check_WebSocket_CloseConnection(Val Result, Val Option)
If Left(Option, 8) = "Openning" Then
Result = String(TypeOf(Result));
ExpectsThat(Result).Равно("AddIn.OPI_WSClient.Main");
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_SendPing(Val Result, Val Option)
If Left(Option, 8) = "Check" Then
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("pong");
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_SendPong(Val Result, Val Option)
ExpectsThat(Result["result"]).Равно(True);
Return Result;
EndFunction
Function Check_WebSocket_GetMessage(Val Result, Val Option, Message = "")
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("text");
ExpectsThat(Result["data"]).Равно(Message);
Return Result;
EndFunction
Function Check_WebSocket_SendTextMessage(Val Result, Val Option, Message = "")
If Left(Option, 8) = "Check" Then
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("text");
ExpectsThat(Result["data"]).Равно(Message);
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_SendBinaryMessage(Val Result, Val Option, Message = "")
If Left(Option, 8) = "Check" Then
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("binary");
Data = GetStringFromBinaryData(Result["data"]);
ExpectsThat(Data).Равно(Message);
Result["data"] = "<BinaryData>";
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_GetTlsSettings(Val Result, Val Option)
ExpectsThat(OPI_Tools.ThisIsCollection(Result, True)).Равно(True);
Return Result;
EndFunction
Function Check_WebSocket_IsClientObject(Val Result, Val Option)
If Left(Option, 4) = "False" Then
ExpectsThat(Result).Равно(False);
Else
ExpectsThat(Result).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_SQLite_CreateConnection(Val Result, Val Option)
If Option = "Closing" Then
@@ -85,3 +85,256 @@ Function ПолучитьСписокТестов(UnitTesting) Export
EndFunction
#Region Internal
#Region RunnableTests
#Region WebSocket
Procedure WS_Client() Export
OptionArray = OPI_TestDataRetrieval.GetWebSocketParametersOptions();
For Each TestParameters In OptionArray Do
WebSocket_CreateConnection(TestParameters);
WebSocket_CloseConnection(TestParameters);
WebSocket_SendPing(TestParameters);
WebSocket_SendPong(TestParameters);
WebSocket_GetMessage(TestParameters);
WebSocket_SendTextMessage(TestParameters);
WebSocket_SendBinaryMessage(TestParameters);
WebSocket_GetTlsSettings(TestParameters);
WebSocket_IsClientObject(TestParameters);
EndDo;
EndProcedure
#EndRegion // WebSocket
#EndRegion // RunnableTests
#EndRegion // Internal
#Region Private
#Region AtomicTests
#Region WebSocket
Procedure WebSocket_CreateConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CreateConnection", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_CloseConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CloseConnection", "Openning, " + Postfix); // SKIP
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.CloseConnection(Connection);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "CloseConnection", Postfix);
EndProcedure
Procedure WebSocket_SendPing(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendPing(Connection);
Check = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPing", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendPing", "Check, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendPong(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendPong(Connection);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPong", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "echo-text-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Sending = OPI_WebSocket.SendTextMessage(Connection, Message); // SKIP
OPI_TestDataRetrieval.Process(Sending, "WebSocket", "GetMessage", "Sending, " + Postfix); // SKIP
Result = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetMessage", Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendTextMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "text-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendTextMessage(Connection, Message);
Check = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendTextMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendTextMessage", "Check, " + Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendBinaryMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
SourceString = "binary-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
Data = GetBinaryDataFromString(SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendBinaryMessage(Connection, Data);
Check = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendBinaryMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendBinaryMessage", "Check, " + Postfix, SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetTlsSettings(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Result = OPI_WebSocket.GetTlsSettings(True);
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetTlsSettings", Postfix);
EndProcedure
Procedure WebSocket_IsClientObject(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.IsClientObject(Connection);
Else
Result = OPI_WebSocket.IsClientObject("not-a-client");
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", Postfix);
Result = OPI_WebSocket.IsClientObject("not-a-client");
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", "False, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
#EndRegion // WebSocket
#EndRegion // AtomicTests
#Region AdditionalFunctions
Function CreateWebSocketClient(FunctionParameters)
Address = GetWebSocketAddress(FunctionParameters);
TLSSettings = Undefined;
ProxySettings = Undefined;
Headers = New Structure("X-Trace-Id", "OPI-WS-TEST");
If FunctionParameters["TLS"] Then
TLSSettings = OPI_WebSocket.GetTlsSettings(True);
EndIf;
If FunctionParameters["Proxy"] Then
ProxySettings = OPI_AddIns.GetProxySettings(
FunctionParameters["Proxy_IP"],
FunctionParameters["Proxy_Port"],
FunctionParameters["Proxy_Type"],
FunctionParameters["Proxy_User"],
FunctionParameters["Proxy_Password"]);
EndIf;
Return OPI_WebSocket.CreateConnection(Address, TLSSettings, ProxySettings, , Headers);
EndFunction
Function GetWebSocketAddress(FunctionParameters)
Scheme = ?(FunctionParameters["TLS"], "wss://", "ws://");
Host = FunctionParameters["WS_IP"];
Port = FunctionParameters["WS_Port"];
Return StrTemplate("%1%2:%3", Scheme, Host, Port);
EndFunction
#EndRegion // AdditionalFunctions
#EndRegion // Private
+286 -1
View File
@@ -87,9 +87,294 @@ Function ПолучитьСписокТестов(UnitTesting) Export
EndFunction
#Region Internal
#Region RunnableTests
#Region WebSocket
Procedure WS_Client() Export
OptionArray = OPI_TestDataRetrieval.GetWebSocketParametersOptions();
For Each TestParameters In OptionArray Do
WebSocket_CreateConnection(TestParameters);
WebSocket_CloseConnection(TestParameters);
WebSocket_SendPing(TestParameters);
WebSocket_SendPong(TestParameters);
WebSocket_GetMessage(TestParameters);
WebSocket_SendTextMessage(TestParameters);
WebSocket_SendBinaryMessage(TestParameters);
WebSocket_GetTlsSettings(TestParameters);
WebSocket_IsClientObject(TestParameters);
EndDo;
EndProcedure
#EndRegion // WebSocket
#EndRegion // RunnableTests
#EndRegion // Internal
#Region Private
#Region AtomicTests
#Region WebSocket
Procedure WebSocket_CreateConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CreateConnection", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_CloseConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CloseConnection", "Openning, " + Postfix); // SKIP
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.CloseConnection(Connection);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "CloseConnection", Postfix);
EndProcedure
Procedure WebSocket_SendPing(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendPing", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Check = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPing", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendPing", "Check, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendPong(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendPong", Options);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPong", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "echo-text-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Sending = OPI_WebSocket.SendTextMessage(Connection, Message); // SKIP
OPI_TestDataRetrieval.Process(Sending, "WebSocket", "GetMessage", "Sending, " + Postfix); // SKIP
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetMessage", Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendTextMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "text-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("text", Message);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendTextMessage", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Check = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendTextMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendTextMessage", "Check, " + Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendBinaryMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
SourceString = "binary-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
Data = GetBinaryDataFromString(SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("data", Data);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendBinaryMessage", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Check = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendBinaryMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendBinaryMessage", "Check, " + Postfix, SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetTlsSettings(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Result = OPI_WebSocket.GetTlsSettings(True);
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetTlsSettings", Postfix);
EndProcedure
Procedure WebSocket_IsClientObject(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.IsClientObject(Connection);
Else
Result = OPI_WebSocket.IsClientObject("not-a-client");
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", Postfix);
Result = OPI_WebSocket.IsClientObject("not-a-client");
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", "False, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
#EndRegion // WebSocket
#EndRegion // AtomicTests
#Region AdditionalFunctions
Function CreateWebSocketClient(FunctionParameters)
Address = GetWebSocketAddress(FunctionParameters);
TLSSettings = Undefined;
ProxySettings = Undefined;
Headers = New Structure("X-Trace-Id", "OPI-WS-TEST");
If FunctionParameters["TLS"] Then
TLSSettings = OPI_WebSocket.GetTlsSettings(True);
EndIf;
If FunctionParameters["Proxy"] Then
ProxySettings = OPI_AddIns.GetProxySettings(
FunctionParameters["Proxy_IP"],
FunctionParameters["Proxy_Port"],
FunctionParameters["Proxy_Type"],
FunctionParameters["Proxy_User"],
FunctionParameters["Proxy_Password"]);
EndIf;
Return OPI_WebSocket.CreateConnection(Address, TLSSettings, ProxySettings, , Headers);
EndFunction
Function GetWebSocketAddress(FunctionParameters)
Scheme = ?(FunctionParameters["TLS"], "wss://", "ws://");
Host = FunctionParameters["WS_IP"];
Port = FunctionParameters["WS_Port"];
Return StrTemplate("%1%2:%3", Scheme, Host, Port);
EndFunction
#EndRegion // AdditionalFunctions
#EndRegion // Private
#Region Alternate
Procedure WS_Клиент() Export
WS_Client();
EndProcedure
#EndRegion
+1 -1
View File
@@ -1 +1 @@
66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349
C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B
+1 -2
View File
@@ -561,8 +561,7 @@ EndFunction
// String, Map Of KeyAndValue - Log as a string or a map with the full execution result
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
Return OPI_GenericServer.GetLog(OPI_TCP
, ServerObject
Return OPI_AddIns.GetLog(ServerObject
, AsString
, EventCount);
+122 -29
View File
@@ -72,6 +72,24 @@ Function GetLoggingSettings(Val WriteToMemory = True
EndFunction
// Get log !NOCLI
// Retrieves server log data (with logging to memory enabled)
//
// Parameters:
// ServerObject - Arbitrary - Server or client component object - srv
// AsString - Boolean - True > returns log as a single string, False > as an array - str
// EventCount - Number - Number of recent events to retrieve. 0 > no limits - count
//
// Returns:
// String, Map Of KeyAndValue - Log as a string or a map with the full execution result
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
Return OPI_AddIns.GetLog(ServerObject
, AsString
, EventCount);
EndFunction
#EndRegion
#Region ClientMethods
@@ -83,6 +101,7 @@ EndFunction
// Address - String - Address and port - address
// Tls - Structure Of KeyAndValue - TLS settings, if necessary. See GetTlsSettings - tls
// Proxy - Structure Of KeyAndValue - Proxy settings, if required. See GetProxySettings - proxy
// Headers - Map Of KeyAndValue - Map of additional HTTP headers for handshake - headers
// Logging - Structure Of KeyAndValue - Logging settings. See GetLoggingSettings - log
//
// Returns:
@@ -90,6 +109,7 @@ EndFunction
Function CreateConnection(Val Address
, Val Tls = Undefined
, Val Proxy = Undefined
, Val Headers = Undefined
, Val Logging = Undefined) Export
OPI_TypeConversion.GetLine(Address);
@@ -128,6 +148,20 @@ Function CreateConnection(Val Address
EndIf;
If ValueIsFilled(Headers) Then
ErrorText = "Incorrect header structure";
OPI_TypeConversion.GetKeyValueCollection(Headers, ErrorText);
HeadersAsString = OPI_Tools.JSONString(Headers);
Result = WSClient.SetHeaders(HeadersAsString);
If Not OPI_Tools.GetOr(Result, "result", False) Then
Return Result;
EndIf;
EndIf;
Result = WSClient.Connect(Address, SettingsString);
Result = OPI_Tools.JsonToStructure(Result);
@@ -140,14 +174,19 @@ EndFunction
//
// Parameters:
// Connection - Arbitrary - Connection, See CreateConnection - conn
// Code - Number - Status code - code
// Reason - String - Close message - reason
//
// Returns:
// Structure Of KeyAndValue - Result of connection termination
Function CloseConnection(Val Connection) Export
Function CloseConnection(Val Connection, Val Code = 1000, Val Reason = "") Export
If IsClientObject(Connection) Then
Result = Connection.Disconnect();
OPI_TypeConversion.GetNumber(Code);
OPI_TypeConversion.GetLine(Reason);
Result = Connection.Close(Code, Reason);
Result = OPI_Tools.JsonToStructure(Result, False);
Else
@@ -161,6 +200,60 @@ Function CloseConnection(Val Connection) Export
EndFunction
// Send ping
// Sends a ping to the remote server
//
// Parameters:
// Connection - Arbitrary - Connection, See CreateConnection - conn
//
// Returns:
// Map Of KeyAndValue - Execution result
Function SendPing(Val Connection) Export
If Not IsClientObject(Connection) Then
ErrorMap = New Map;
ErrorMap.Insert("result", False);
ErrorMap.Insert("error" , "Implicit connection opening is senseless in this case");
Return ErrorMap;
EndIf;
Result = Connection.SendPing();
Result = OPI_Tools.JsonToStructure(Result);
Return Result;
EndFunction
// Send pong
// Sends a pong to the remote server
//
// Parameters:
// Connection - Arbitrary - Connection, See CreateConnection - conn
//
// Returns:
// Map Of KeyAndValue - Execution result
Function SendPong(Val Connection) Export
If Not IsClientObject(Connection) Then
ErrorMap = New Map;
ErrorMap.Insert("result", False);
ErrorMap.Insert("error" , "Implicit connection opening is senseless in this case");
Return ErrorMap;
EndIf;
Result = Connection.SendPong();
Result = OPI_Tools.JsonToStructure(Result);
Return Result;
EndFunction
// Get message
// Receives an incoming message from the queue or waits for a new one
//
@@ -185,6 +278,17 @@ Function GetMessage(Val Connection, Val Timeout = 10000) Export
OPI_TypeConversion.GetNumber(Timeout);
Result = Connection.ReceiveMessage(Timeout);
Result = OPI_Tools.JsonToStructure(Result);
If OPI_Tools.GetOr(Result, "type", "") = "binary" Then
Data = OPI_Tools.GetOr(Result, "data", "");
If ValueIsFilled(Data) Then
Result.Insert("data", OPI_AddIns.ReceiveData(Connection, Data));
EndIf;
EndIf;
Return Result;
@@ -408,25 +512,6 @@ Function GetConnectionList(Val ServerObject) Export
EndFunction
// Get log !NOCLI
// Retrieves server log data (with logging to memory enabled)
//
// Parameters:
// ServerObject - Arbitrary - Object of running server component - srv
// AsString - Boolean - True > returns log as a single string, False > as an array - str
// EventCount - Number - Number of recent events to retrieve. 0 > no limits - count
//
// Returns:
// String, Map Of KeyAndValue - Log as a string or a map with the full execution result
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
Return OPI_GenericServer.GetLog(OPI_WebSocket
, ServerObject
, AsString
, EventCount);
EndFunction
// Is server object !NOCLI
// Checks that the value is an object of the TCP server external component
//
@@ -462,12 +547,24 @@ Function ПолучитьНастройкиЛогирования(Val Запис
Return GetLoggingSettings(ЗаписьВПамять, МаксимумСобытий, ПутьКФайлу);
EndFunction
Function ОткрытьСоединение(Val Адрес, Val Tls = Undefined, Val Прокси = Undefined, Val Логирование = Undefined) Export
Return CreateConnection(Адрес, Tls, Прокси, Логирование);
Function ПолучитьЛог(Val ОбъектСервера, Val КакСтрока = False, Val ЧислоСобытий = 100) Export
Return GetLog(ОбъектСервера, КакСтрока, ЧислоСобытий);
EndFunction
Function ЗакрытьСоединение(Val Соединение) Export
Return CloseConnection(Соединение);
Function ОткрытьСоединение(Val Адрес, Val Tls = Undefined, Val Прокси = Undefined, Val Заголовки = Undefined, Val Логирование = Undefined) Export
Return CreateConnection(Адрес, Tls, Прокси, Заголовки, Логирование);
EndFunction
Function ЗакрытьСоединение(Val Соединение, Val Код = 1000, Val Причина = "") Export
Return CloseConnection(Соединение, Код, Причина);
EndFunction
Function ОтправитьПинг(Val Соединение) Export
Return SendPing(Соединение);
EndFunction
Function ОтправитьПонг(Val Соединение) Export
Return SendPong(Соединение);
EndFunction
Function ПолучитьСообщение(Val Соединение, Val Таймаут = 10000) Export
@@ -518,10 +615,6 @@ Function ПолучитьСписокСоединений(Val ОбъектСер
Return GetConnectionList(ОбъектСервера);
EndFunction
Function ПолучитьЛог(Val ОбъектСервера, Val КакСтрока = False, Val ЧислоСобытий = 100) Export
Return GetLog(ОбъектСервера, КакСтрока, ЧислоСобытий);
EndFunction
Function ЭтоОбъектСервера(Val Значение) Export
Return IsServerObject(Значение);
EndFunction
+256 -1
View File
@@ -85,9 +85,264 @@ Function ПолучитьСписокТестов(UnitTesting) Export
EndFunction
#Region Internal
#Region RunnableTests
#Region WebSocket
Procedure WS_Client() Export
OptionArray = OPI_TestDataRetrieval.GetWebSocketParametersOptions();
For Each TestParameters In OptionArray Do
WebSocket_CreateConnection(TestParameters);
WebSocket_CloseConnection(TestParameters);
WebSocket_SendPing(TestParameters);
WebSocket_SendPong(TestParameters);
WebSocket_GetMessage(TestParameters);
WebSocket_SendTextMessage(TestParameters);
WebSocket_SendBinaryMessage(TestParameters);
WebSocket_GetTlsSettings(TestParameters);
WebSocket_IsClientObject(TestParameters);
EndDo;
EndProcedure
#EndRegion // WebSocket
#EndRegion // RunnableTests
#EndRegion // Internal
#Region Private
#Region AtomicTests
#Region WebSocket
Procedure WebSocket_CreateConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CreateConnection", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_CloseConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CloseConnection", "Openning, " + Postfix); // SKIP
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.CloseConnection(Connection);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "CloseConnection", Postfix);
EndProcedure
Procedure WebSocket_SendPing(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendPing(Connection);
Check = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPing", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendPing", "Check, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendPong(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendPong(Connection);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPong", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "echo-text-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Sending = OPI_WebSocket.SendTextMessage(Connection, Message); // SKIP
OPI_TestDataRetrieval.Process(Sending, "WebSocket", "GetMessage", "Sending, " + Postfix); // SKIP
Result = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetMessage", Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendTextMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "text-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendTextMessage(Connection, Message);
Check = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendTextMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendTextMessage", "Check, " + Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendBinaryMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
SourceString = "binary-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
Data = GetBinaryDataFromString(SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.SendBinaryMessage(Connection, Data);
Check = OPI_WebSocket.GetMessage(Connection, 3000);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendBinaryMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendBinaryMessage", "Check, " + Postfix, SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetTlsSettings(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Result = OPI_WebSocket.GetTlsSettings(True);
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetTlsSettings", Postfix);
EndProcedure
Procedure WebSocket_IsClientObject(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.IsClientObject(Connection);
Else
Result = OPI_WebSocket.IsClientObject("not-a-client");
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", Postfix);
Result = OPI_WebSocket.IsClientObject("not-a-client");
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", "False, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
#EndRegion // WebSocket
#EndRegion // AtomicTests
#Region AdditionalFunctions
Function CreateWebSocketClient(FunctionParameters)
Address = GetWebSocketAddress(FunctionParameters);
TLSSettings = Undefined;
ProxySettings = Undefined;
Headers = New Structure("X-Trace-Id", "OPI-WS-TEST");
If FunctionParameters["TLS"] Then
TLSSettings = OPI_WebSocket.GetTlsSettings(True);
EndIf;
If FunctionParameters["Proxy"] Then
ProxySettings = OPI_AddIns.GetProxySettings(
FunctionParameters["Proxy_IP"],
FunctionParameters["Proxy_Port"],
FunctionParameters["Proxy_Type"],
FunctionParameters["Proxy_User"],
FunctionParameters["Proxy_Password"]);
EndIf;
Return OPI_WebSocket.CreateConnection(Address, TLSSettings, ProxySettings, , Headers);
EndFunction
Function GetWebSocketAddress(FunctionParameters)
Scheme = ?(FunctionParameters["TLS"], "wss://", "ws://");
Host = FunctionParameters["WS_IP"];
Port = FunctionParameters["WS_Port"];
Return StrTemplate("%1%2:%3", Scheme, Host, Port);
EndFunction
#EndRegion // AdditionalFunctions
#EndRegion // Private
#Region Alternate
Procedure WS_Клиент() Export
WS_Client();
EndProcedure
#EndRegion
+286 -1
View File
@@ -87,9 +87,294 @@ Function ПолучитьСписокТестов(UnitTesting) Export
EndFunction
#Region Internal
#Region RunnableTests
#Region WebSocket
Procedure WS_Client() Export
OptionArray = OPI_TestDataRetrieval.GetWebSocketParametersOptions();
For Each TestParameters In OptionArray Do
WebSocket_CreateConnection(TestParameters);
WebSocket_CloseConnection(TestParameters);
WebSocket_SendPing(TestParameters);
WebSocket_SendPong(TestParameters);
WebSocket_GetMessage(TestParameters);
WebSocket_SendTextMessage(TestParameters);
WebSocket_SendBinaryMessage(TestParameters);
WebSocket_GetTlsSettings(TestParameters);
WebSocket_IsClientObject(TestParameters);
EndDo;
EndProcedure
#EndRegion // WebSocket
#EndRegion // RunnableTests
#EndRegion // Internal
#Region Private
#Region AtomicTests
#Region WebSocket
Procedure WebSocket_CreateConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CreateConnection", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_CloseConnection(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
OPI_TestDataRetrieval.Process(Connection, "WebSocket", "CloseConnection", "Openning, " + Postfix); // SKIP
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.CloseConnection(Connection);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "CloseConnection", Postfix);
EndProcedure
Procedure WebSocket_SendPing(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendPing", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Check = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPing", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendPing", "Check, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendPong(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendPong", Options);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendPong", Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "echo-text-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Sending = OPI_WebSocket.SendTextMessage(Connection, Message); // SKIP
OPI_TestDataRetrieval.Process(Sending, "WebSocket", "GetMessage", "Sending, " + Postfix); // SKIP
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetMessage", Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendTextMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
Message = "text-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("text", Message);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendTextMessage", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Check = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendTextMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendTextMessage", "Check, " + Postfix, Message);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_SendBinaryMessage(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
SourceString = "binary-message-" + Format(CurrentDate(), "DF=yyyyMMddhhmmss");
Data = GetBinaryDataFromString(SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("data", Data);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "SendBinaryMessage", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("tout", 3000);
Check = OPI_TestDataRetrieval.ExecuteTestCLI("ws", "GetMessage", Options);
Else
Result = Connection;
Check = Connection;
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "SendBinaryMessage", Postfix);
OPI_TestDataRetrieval.Process(Check , "WebSocket", "SendBinaryMessage", "Check, " + Postfix, SourceString);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
Procedure WebSocket_GetTlsSettings(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Result = OPI_WebSocket.GetTlsSettings(True);
OPI_TestDataRetrieval.Process(Result, "WebSocket", "GetTlsSettings", Postfix);
EndProcedure
Procedure WebSocket_IsClientObject(FunctionParameters)
Postfix = FunctionParameters["Postfix"];
Connection = CreateWebSocketClient(FunctionParameters);
If OPI_WebSocket.IsClientObject(Connection) Then
Result = OPI_WebSocket.IsClientObject(Connection);
Else
Result = OPI_WebSocket.IsClientObject("not-a-client");
EndIf;
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", Postfix);
Result = OPI_WebSocket.IsClientObject("not-a-client");
OPI_TestDataRetrieval.Process(Result, "WebSocket", "IsClientObject", "False, " + Postfix);
If OPI_WebSocket.IsClientObject(Connection) Then
OPI_WebSocket.CloseConnection(Connection);
EndIf;
EndProcedure
#EndRegion // WebSocket
#EndRegion // AtomicTests
#Region AdditionalFunctions
Function CreateWebSocketClient(FunctionParameters)
Address = GetWebSocketAddress(FunctionParameters);
TLSSettings = Undefined;
ProxySettings = Undefined;
Headers = New Structure("X-Trace-Id", "OPI-WS-TEST");
If FunctionParameters["TLS"] Then
TLSSettings = OPI_WebSocket.GetTlsSettings(True);
EndIf;
If FunctionParameters["Proxy"] Then
ProxySettings = OPI_AddIns.GetProxySettings(
FunctionParameters["Proxy_IP"],
FunctionParameters["Proxy_Port"],
FunctionParameters["Proxy_Type"],
FunctionParameters["Proxy_User"],
FunctionParameters["Proxy_Password"]);
EndIf;
Return OPI_WebSocket.CreateConnection(Address, TLSSettings, ProxySettings, , Headers);
EndFunction
Function GetWebSocketAddress(FunctionParameters)
Scheme = ?(FunctionParameters["TLS"], "wss://", "ws://");
Host = FunctionParameters["WS_IP"];
Port = FunctionParameters["WS_Port"];
Return StrTemplate("%1%2:%3", Scheme, Host, Port);
EndFunction
#EndRegion // AdditionalFunctions
#EndRegion // Private
#Region Alternate
Procedure WS_Клиент() Export
WS_Client();
EndProcedure
#EndRegion
@@ -154,6 +154,7 @@ Function GetTestingSectionMapping() Export
Sections.Insert("YandexMetrika" , 5);
Sections.Insert("S3" , 5);
Sections.Insert("TCP" , 5);
Sections.Insert("WebSocket" , 5);
Sections.Insert("GreenAPI" , 5);
Sections.Insert("GreenMax" , 5);
Sections.Insert("Ollama" , 5);
@@ -189,6 +190,7 @@ Function GetTestTable(Val TestModule = "") Export
Metrika = "YandexMetrika";
S3_ = "S3";
TCP = "TCP";
WebSocket = "WebSocket";
SQLite = "SQLite";
Postgres = "PostgreSQL";
MongoDB = "MongoDB";
@@ -336,6 +338,7 @@ Function GetTestTable(Val TestModule = "") Export
NewTest(TestTable, "AWS_BucketsManagement" , "Buckets management" , S3_);
NewTest(TestTable, "AWS_ObjectsManagement" , "Objects management" , S3_);
NewTest(TestTable, "TC_Client" , "TCP Client" , TCP);
NewTest(TestTable, "WS_Client" , "WebSocket Client" , WebSocket);
NewTest(TestTable, "TC_Server" , "TCP Host" , TCP);
NewTest(TestTable, "SQLL_CommonMethods" , "Common methods" , SQLite);
NewTest(TestTable, "SQLL_ORM" , "ORM" , SQLite);
@@ -988,6 +991,85 @@ Function GetFTPParameterOptions() Export
EndFunction
Function GetWebSocketParametersOptions() Export
OptionArray = New Array;
TestParametersMain = New Structure;
ParameterToCollection("WS_IP" , TestParametersMain);
ParameterToCollection("WS_Port" , TestParametersMain);
ParameterToCollection("WSS_IP" , TestParametersMain);
ParameterToCollection("WSS_Port" , TestParametersMain);
ParameterToCollection("Proxy_User" , TestParametersMain);
ParameterToCollection("Proxy_Password", TestParametersMain);
ParameterToCollection("Socks5_IP" , TestParametersMain);
ParameterToCollection("Socks5_Port" , TestParametersMain);
Localhost = GetLocalhost();
Socks5IP = TestParametersMain["Socks5_IP"];
TestParametersMain["Socks5_IP"] = ?(Socks5IP = "127.0.0.1", Localhost, Socks5IP);
// WS
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WS");
ParametersStructure.Insert("WS_IP", Localhost);
ParametersStructure.Insert("WS_Port", TestParametersMain["WS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", False);
ParametersStructure.Insert("TLS", False);
OptionArray.Add(ParametersStructure);
// WSS
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WSS");
ParametersStructure.Insert("WS_IP", Localhost);
ParametersStructure.Insert("WS_Port", TestParametersMain["WSS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", False);
ParametersStructure.Insert("TLS", True);
OptionArray.Add(ParametersStructure);
// WS + Socks5
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WS, Socks5");
ParametersStructure.Insert("WS_IP", TestParametersMain["WS_IP"]);
ParametersStructure.Insert("WS_Port", TestParametersMain["WS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", True);
ParametersStructure.Insert("TLS", False);
OptionArray.Add(ParametersStructure);
// WSS + Socks5
ParametersStructure = New Structure;
ParametersStructure.Insert("Postfix", "WSS, Socks5");
ParametersStructure.Insert("WS_IP", TestParametersMain["WSS_IP"]);
ParametersStructure.Insert("WS_Port", TestParametersMain["WSS_Port"]);
ParametersStructure.Insert("Proxy_User", TestParametersMain["Proxy_User"]);
ParametersStructure.Insert("Proxy_Password", TestParametersMain["Proxy_Password"]);
ParametersStructure.Insert("Proxy_IP", TestParametersMain["Socks5_IP"]);
ParametersStructure.Insert("Proxy_Port", TestParametersMain["Socks5_Port"]);
ParametersStructure.Insert("Proxy_Type", "socks5");
ParametersStructure.Insert("Proxy", True);
ParametersStructure.Insert("TLS", True);
OptionArray.Add(ParametersStructure);
Return OptionArray;
EndFunction
Function GetSSHParameterOptions() Export
OptionArray = New Array;
@@ -7692,6 +7774,109 @@ Function Check_TCP_IsServerObject(Val Result, Val Option)
EndFunction
Function Check_WebSocket_CreateConnection(Val Result, Val Option)
Result = String(TypeOf(Result));
ExpectsThat(Result).Равно("AddIn.OPI_WSClient.Main");
Return Result;
EndFunction
Function Check_WebSocket_CloseConnection(Val Result, Val Option)
If Left(Option, 8) = "Openning" Then
Result = String(TypeOf(Result));
ExpectsThat(Result).Равно("AddIn.OPI_WSClient.Main");
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_SendPing(Val Result, Val Option)
If Left(Option, 8) = "Check" Then
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("pong");
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_SendPong(Val Result, Val Option)
ExpectsThat(Result["result"]).Равно(True);
Return Result;
EndFunction
Function Check_WebSocket_GetMessage(Val Result, Val Option, Message = "")
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("text");
ExpectsThat(Result["data"]).Равно(Message);
Return Result;
EndFunction
Function Check_WebSocket_SendTextMessage(Val Result, Val Option, Message = "")
If Left(Option, 8) = "Check" Then
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("text");
ExpectsThat(Result["data"]).Равно(Message);
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_SendBinaryMessage(Val Result, Val Option, Message = "")
If Left(Option, 8) = "Check" Then
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["type"]).Равно("binary");
Data = GetStringFromBinaryData(Result["data"]);
ExpectsThat(Data).Равно(Message);
Result["data"] = "<BinaryData>";
Else
ExpectsThat(Result["result"]).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_WebSocket_GetTlsSettings(Val Result, Val Option)
ExpectsThat(OPI_Tools.ThisIsCollection(Result, True)).Равно(True);
Return Result;
EndFunction
Function Check_WebSocket_IsClientObject(Val Result, Val Option)
If Left(Option, 4) = "False" Then
ExpectsThat(Result).Равно(False);
Else
ExpectsThat(Result).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_SQLite_CreateConnection(Val Result, Val Option)
If Option = "Closing" Then
@@ -15098,6 +15283,10 @@ Function ПолучитьВариантыПараметровFTP() Export
Return GetFTPParameterOptions();
EndFunction
Function ПолучитьВариантыПараметровWebSocket() Export
Return GetWebSocketParametersOptions();
EndFunction
Function ПолучитьВариантыПараметровSSH() Export
Return GetSSHParameterOptions();
EndFunction
+69 -27
View File
@@ -93,33 +93,13 @@ Function FileTransferRequired() Export
EndFunction
Function GetLoggingSettings(Val WriteToMemory = True
, Val MaxEvents = 300
, Val FilePath = "") Export
Function NotAddinParameterError() Export
OPI_TypeConversion.GetBoolean(WriteToMemory);
OPI_TypeConversion.GetLine(FilePath);
OPI_TypeConversion.GetNumber(MaxEvents);
Result = New Map;
Result.Insert("result", False);
Result.Insert("error" , "The passed value is not an AddIn object");
SettingsStructure = New Structure;
WriteToFile = ValueIsFilled(FilePath);
If WriteToMemory Then
SettingsStructure.Insert("mode" , "memory");
SettingsStructure.Insert("max_entries", MaxEvents);
EndIf;
If WriteToFile Then
SettingsStructure.Insert("mode" , "file");
SettingsStructure.Insert("file_path", FilePath);
EndIf;
If WriteToFile And WriteToMemory Then
SettingsStructure.Insert("mode", "both");
EndIf;
//@skip-check constructor-function-return-section
Return SettingsStructure;
Return Result;
EndFunction
@@ -250,6 +230,60 @@ EndFunction
#EndRegion
#Region Logging
Function GetLoggingSettings(Val WriteToMemory = True
, Val MaxEvents = 300
, Val FilePath = "") Export
OPI_TypeConversion.GetBoolean(WriteToMemory);
OPI_TypeConversion.GetLine(FilePath);
OPI_TypeConversion.GetNumber(MaxEvents);
SettingsStructure = New Structure;
WriteToFile = ValueIsFilled(FilePath);
If WriteToMemory Then
SettingsStructure.Insert("mode" , "memory");
SettingsStructure.Insert("max_entries", MaxEvents);
EndIf;
If WriteToFile Then
SettingsStructure.Insert("mode" , "file");
SettingsStructure.Insert("file_path", FilePath);
EndIf;
If WriteToFile And WriteToMemory Then
SettingsStructure.Insert("mode", "both");
EndIf;
//@skip-check constructor-function-return-section
Return SettingsStructure;
EndFunction
Function GetLog(Val ServerObject, Val AsString = False, Val EventCount = 100) Export
If Not IsAddIn(ServerObject) Then
Return NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(EventCount);
OPI_TypeConversion.GetBoolean(AsString);
Result = ServerObject.GetLogs(EventCount);
Result = OPI_Tools.JsonToStructure(Result);
If AsString And Result["result"] Then
Result = StrConcat(Result["logs"], Chars.LF);
EndIf;
Return Result;
EndFunction
#EndRegion
#EndRegion
#Region Private
@@ -395,8 +429,8 @@ Function ТребуетсяПередачаЧерезФайл() Export
Return FileTransferRequired();
EndFunction
Function ПолучитьНастройкиЛогирования(Val ЗаписьВПамять = True, Val МаксимумСобытий = 300, Val ПутьКФайлу = "") Export
Return GetLoggingSettings(ЗаписьВПамять, МаксимумСобытий, ПутьКФайлу);
Function ОшибкаПараметрНеКомпонента() Export
Return NotAddinParameterError();
EndFunction
Function УстановитьTls(Val Компонета, Val Tls) Export
@@ -419,6 +453,14 @@ Function ПолучитьДанные(Val Компонента, Val КлючДа
Return ReceiveData(Компонента, КлючДанных);
EndFunction
Function ПолучитьНастройкиЛогирования(Val ЗаписьВПамять = True, Val МаксимумСобытий = 300, Val ПутьКФайлу = "") Export
Return GetLoggingSettings(ЗаписьВПамять, МаксимумСобытий, ПутьКФайлу);
EndFunction
Function ПолучитьЛог(Val ОбъектСервера, Val КакСтрока = False, Val ЧислоСобытий = 100) Export
Return GetLog(ОбъектСервера, КакСтрока, ЧислоСобытий);
EndFunction
Function КаталогКомпонентOS() Export
Return AddInsFolderOS();
EndFunction
+8 -42
View File
@@ -77,7 +77,7 @@ Function StopServer(Val Module, Val ServerObject) Export
If Not Module.IsServerObject(ServerObject) Then
Result = NotAddinParameterError();
Result = OPI_AddIns.NotAddinParameterError();
Else
@@ -96,7 +96,7 @@ Function GetNextConnectionData(Val Module
, Val MaxSize = 8192) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(Timeout);
@@ -118,7 +118,7 @@ Function GetConnectionData(Val Module
, Val MaxSize = 8192) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(Timeout);
@@ -137,7 +137,7 @@ EndFunction
Function SendData(Val Module, Val ServerObject, Val ConnectionID, Val Data) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetBinaryData(Data, True, False);
@@ -153,7 +153,7 @@ EndFunction
Function CloseIncomingConnection(Val Module, Val ServerObject, Val ConnectionID) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetLine(ConnectionID);
@@ -168,7 +168,7 @@ EndFunction
Function CompleteSend(Val Module, Val ServerObject, Val ConnectionID) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetLine(ConnectionID);
@@ -183,7 +183,7 @@ EndFunction
Function FinishReceiving(Val Module, Val ServerObject, Val ConnectionID) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetLine(ConnectionID);
@@ -198,7 +198,7 @@ EndFunction
Function GetConnectionList(Val Module, Val ServerObject) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
Return OPI_AddIns.NotAddinParameterError();
EndIf;
Result = ServerObject.GetConnectionsList();
@@ -208,40 +208,10 @@ Function GetConnectionList(Val Module, Val ServerObject) Export
EndFunction
Function GetLog(Val Module, Val ServerObject, Val AsString = False, Val EventCount = 100) Export
If Not Module.IsServerObject(ServerObject) Then
Return NotAddinParameterError();
EndIf;
OPI_TypeConversion.GetNumber(EventCount);
OPI_TypeConversion.GetBoolean(AsString);
Result = ServerObject.GetLogs(EventCount);
Result = OPI_Tools.JsonToStructure(Result);
If AsString And Result["result"] Then
Result = StrConcat(Result["logs"], Chars.LF);
EndIf;
Return Result;
EndFunction
#EndRegion
#Region Internal
Function NotAddinParameterError()
Result = New Map;
Result.Insert("result", False);
Result.Insert("error" , "The passed value is not a server object");
Return Result;
EndFunction
Procedure CompleteMessageWithVaultData(Val ServerObject, MessageStructure)
DataKey = Undefined;
@@ -295,8 +265,4 @@ Function ПолучитьСписокСоединений(Val Модуль, Val
Return GetConnectionList(Модуль, ОбъектСервера);
EndFunction
Function ПолучитьЛог(Val Модуль, Val ОбъектСервера, Val КакСтрока = False, Val ЧислоСобытий = 100) Export
Return GetLog(Модуль, ОбъектСервера, КакСтрока, ЧислоСобытий);
EndFunction
#EndRegion
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349";
LastBuildHash = "C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B";
Return LastBuildHash;
+1 -1
View File
@@ -1 +1 @@
66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349
C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B
+32
View File
@@ -10,11 +10,43 @@
"methods": [
"GetMessage",
"SendBinaryMessage",
"SendPing",
"SendPong",
"SendTextMessage"
]
}
],
"methods": [
{
"name": "SendPing",
"id": "SENDPING",
"description": "Sends a ping to the remote server",
"params": [
{
"name": "--conn",
"types": "Arbitrary",
"description": "Connection, See CreateConnection",
"default": null,
"short": "-c"
}
],
"region": "Client methods"
},
{
"name": "SendPong",
"id": "SENDPONG",
"description": "Sends a pong to the remote server",
"params": [
{
"name": "--conn",
"types": "Arbitrary",
"description": "Connection, See CreateConnection",
"default": null,
"short": "-c"
}
],
"region": "Client methods"
},
{
"name": "GetMessage",
"id": "GETMESSAGE",
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "66C0E1541DEF92AD15A4861C5D49CD77457292F4348396608CA790C480727349";
LastBuildHash = "C9C6784E6F6A8D8A56E9C9F5673721469DD3310F2A6E16E8833BBDF2514DC63B";
Return LastBuildHash;
@@ -562,8 +562,8 @@
Функция ПолучитьЛог(Знач ОбъектСервера, Знач КакСтрока = Ложь, Знач ЧислоСобытий = 100) Экспорт
Возврат OPI_Компоненты.ПолучитьЛог(ОбъектСервера
, КакСтрока
, ЧислоСобытий);
, КакСтрока
, ЧислоСобытий);
КонецФункции
@@ -85,8 +85,8 @@
Функция ПолучитьЛог(Знач ОбъектСервера, Знач КакСтрока = Ложь, Знач ЧислоСобытий = 100) Экспорт
Возврат OPI_Компоненты.ПолучитьЛог(ОбъектСервера
, КакСтрока
, ЧислоСобытий);
, КакСтрока
, ЧислоСобытий);
КонецФункции
@@ -147,19 +147,19 @@
СтрокаНастроек = OPI_Инструменты.JSONСтрокой(Логирование);
КонецЕсли;
Если ЗначениеЗаполнено(Заголовки) Тогда
ТекстОшибки = "Некорректная структура заголовков";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Заголовки, ТекстОшибки);
ЗаголовкиСтрокой = OPI_Инструменты.JSONСтрокой(Заголовки);
Результат = WSКлиент.SetHeaders(ЗаголовкиСтрокой);
Если Не OPI_Инструменты.ПолучитьИли(Результат, "result", Ложь) Тогда
Возврат Результат;
Возврат Результат;
КонецЕсли;
КонецЕсли;
Результат = WSКлиент.Connect(Адрес, СтрокаНастроек);
@@ -183,9 +183,9 @@
Если ЭтоОбъектКлиента(Соединение) Тогда
OPI_ПреобразованиеТипов.ПолучитьЧисло(Код);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Причина);
OPI_ПреобразованиеТипов.ПолучитьЧисло(Код);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Причина);
Результат = Соединение.Close(Код, Причина);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат, Ложь);
@@ -202,10 +202,10 @@
// Отправить пинг
// Отправляет пинг удаленному серверу
//
//
// Параметры:
// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - conn
//
// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - conn
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат выполнения
Функция ОтправитьПинг(Знач Соединение) Экспорт
@@ -224,15 +224,15 @@
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Возврат Результат;
КонецФункции
// Отправить понг
// Отправляет понг удаленному серверу
//
//
// Параметры:
// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - conn
//
// Соединение - Произвольный - Соединение, См. ОткрытьСоединение - conn
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат выполнения
Функция ОтправитьПонг(Знач Соединение) Экспорт
@@ -251,7 +251,7 @@
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Возврат Результат;
КонецФункции
// Получить сообщение
@@ -279,15 +279,15 @@
Результат = Соединение.ReceiveMessage(Таймаут);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Если OPI_Инструменты.ПолучитьИли(Результат, "type", "") = "binary" Тогда
Данные = OPI_Инструменты.ПолучитьИли(Результат, "data", "");
Если ЗначениеЗаполнено(Данные) Тогда
Результат.Вставить("data", OPI_Компоненты.ПолучитьДанные(Соединение, Данные));
КонецЕсли;
Данные = OPI_Инструменты.ПолучитьИли(Результат, "data", "");
Если ЗначениеЗаполнено(Данные) Тогда
Результат.Вставить("data", OPI_Компоненты.ПолучитьДанные(Соединение, Данные));
КонецЕсли;
КонецЕсли;
Возврат Результат;
@@ -264,10 +264,10 @@
Функция ПолучитьЛог(Знач ОбъектСервера, Знач КакСтрока = Ложь, Знач ЧислоСобытий = 100) Экспорт
Если Не ЭтоКомпонента(ОбъектСервера) Тогда
Возврат ОшибкаПараметрНеКомпонента();
КонецЕсли;
Если Не ЭтоКомпонента(ОбъектСервера) Тогда
Возврат ОшибкаПараметрНеКомпонента();
КонецЕсли;
OPI_ПреобразованиеТипов.ПолучитьЧисло(ЧислоСобытий);
OPI_ПреобразованиеТипов.ПолучитьБулево(КакСтрока);
@@ -7848,7 +7848,7 @@
Если Лев(Вариант, 8) = "Проверка" Тогда
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["type"]).Равно("binary");
Данные = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
Данные = ПолучитьСтрокуИзДвоичныхДанных(Результат["data"]);
ОжидаетЧто(Данные).Равно(Сообщение);
Результат["data"] = "<ДвоичныеДанные>";
Иначе
+24 -24
View File
@@ -125,7 +125,7 @@
Процедура WebSocket_ОткрытьСоединение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
OPI_ПолучениеДанныхТестов.Обработать(Соединение, "WebSocket", "ОткрытьСоединение", Постфикс);
@@ -138,7 +138,7 @@
Процедура WebSocket_ЗакрытьСоединение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
OPI_ПолучениеДанныхТестов.Обработать(Соединение, "WebSocket", "ЗакрытьСоединение", "Открытие, " + Постфикс); // SKIP
@@ -155,19 +155,19 @@
Процедура WebSocket_ОтправитьПинг(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьПинг(Соединение);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПинг", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка, "WebSocket", "ОтправитьПинг", "Проверка, " + Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьПинг", "Проверка, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
@@ -177,7 +177,7 @@
Процедура WebSocket_ОтправитьПонг(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
@@ -196,12 +196,12 @@
Процедура WebSocket_ПолучитьСообщение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "echo-text-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Отправка = OPI_WebSocket.ОтправитьТекстовоеСообщение(Соединение, Сообщение); // SKIP
Отправка = OPI_WebSocket.ОтправитьТекстовоеСообщение(Соединение, Сообщение); // SKIP
OPI_ПолучениеДанныхТестов.Обработать(Отправка, "WebSocket", "ПолучитьСообщение", "Отправка, " + Постфикс); // SKIP
Результат = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
@@ -218,20 +218,20 @@
Процедура WebSocket_ОтправитьТекстовоеСообщение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "text-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьТекстовоеСообщение(Соединение, Сообщение);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьТекстовоеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка, "WebSocket", "ОтправитьТекстовоеСообщение", "Проверка, " + Постфикс, Сообщение);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьТекстовоеСообщение", "Проверка, " + Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
@@ -241,21 +241,21 @@
Процедура WebSocket_ОтправитьДвоичноеСообщение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
ИсходнаяСтрока = "binary-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Данные = ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока);
Данные = ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ОтправитьДвоичноеСообщение(Соединение, Данные);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Проверка = OPI_WebSocket.ПолучитьСообщение(Соединение, 3000);
Иначе
Результат = Соединение;
Проверка = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьДвоичноеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка, "WebSocket", "ОтправитьДвоичноеСообщение", "Проверка, " + Постфикс, ИсходнаяСтрока);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьДвоичноеСообщение", "Проверка, " + Постфикс, ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
@@ -265,7 +265,7 @@
Процедура WebSocket_ПолучитьНастройкиTls(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Результат = OPI_WebSocket.ПолучитьНастройкиTls(Истина);
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьНастройкиTls", Постфикс);
@@ -274,7 +274,7 @@
Процедура WebSocket_ЭтоОбъектКлиента(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
@@ -304,9 +304,9 @@
Адрес = ПолучитьАдресWebSocket(ПараметрыФункции);
НастройкиTls = Неопределено;
НастройкиTls = Неопределено;
НастройкиПрокси = Неопределено;
Заголовки = Новый Структура("X-Trace-Id", "OPI-WS-TEST");
Заголовки = Новый Структура("X-Trace-Id", "OPI-WS-TEST");
Если ПараметрыФункции["TLS"] Тогда
НастройкиTls = OPI_WebSocket.ПолучитьНастройкиTls(Истина);
@@ -328,8 +328,8 @@
Функция ПолучитьАдресWebSocket(ПараметрыФункции)
Схема = ?(ПараметрыФункции["TLS"], "wss://", "ws://");
Хост = ПараметрыФункции["WS_IP"];
Порт = ПараметрыФункции["WS_Port"];
Хост = ПараметрыФункции["WS_IP"];
Порт = ПараметрыФункции["WS_Port"];
Возврат СтрШаблон("%1%2:%3", Схема, Хост, Порт);
+286 -1
View File
@@ -87,9 +87,294 @@
КонецФункции
#Область СлужебныйПрограммныйИнтерфейс
#Область ЗапускаемыеТесты
#Область WebSocket
Процедура WS_Клиент() Экспорт
МассивВариантов = OPI_ПолучениеДанныхТестов.ПолучитьВариантыПараметровWebSocket();
Для Каждого ПараметрыТеста Из МассивВариантов Цикл
WebSocket_ОткрытьСоединение(ПараметрыТеста);
WebSocket_ЗакрытьСоединение(ПараметрыТеста);
WebSocket_ОтправитьПинг(ПараметрыТеста);
WebSocket_ОтправитьПонг(ПараметрыТеста);
WebSocket_ПолучитьСообщение(ПараметрыТеста);
WebSocket_ОтправитьТекстовоеСообщение(ПараметрыТеста);
WebSocket_ОтправитьДвоичноеСообщение(ПараметрыТеста);
WebSocket_ПолучитьНастройкиTls(ПараметрыТеста);
WebSocket_ЭтоОбъектКлиента(ПараметрыТеста);
КонецЦикла;
КонецПроцедуры
#КонецОбласти // WebSocket
#КонецОбласти // ЗапускаемыеТесты
#КонецОбласти // СлужебныйПрограммныйИнтерфейс
#Область СлужебныеПроцедурыИФункции
#Область АтомарныеТесты
#Область WebSocket
Процедура WebSocket_ОткрытьСоединение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
OPI_ПолучениеДанныхТестов.Обработать(Соединение, "WebSocket", "ОткрытьСоединение", Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
Процедура WebSocket_ЗакрытьСоединение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
OPI_ПолучениеДанныхТестов.Обработать(Соединение, "WebSocket", "ЗакрытьСоединение", "Открытие, " + Постфикс); // SKIP
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ЗакрытьСоединение(Соединение);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЗакрытьСоединение", Постфикс);
КонецПроцедуры
Процедура WebSocket_ОтправитьПинг(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ОтправитьПинг", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("tout", 3000);
Проверка = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ПолучитьСообщение", Опции);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПинг", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьПинг", "Проверка, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
Процедура WebSocket_ОтправитьПонг(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ОтправитьПонг", Опции);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьПонг", Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
Процедура WebSocket_ПолучитьСообщение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "echo-text-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Отправка = OPI_WebSocket.ОтправитьТекстовоеСообщение(Соединение, Сообщение); // SKIP
OPI_ПолучениеДанныхТестов.Обработать(Отправка, "WebSocket", "ПолучитьСообщение", "Отправка, " + Постфикс); // SKIP
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("tout", 3000);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ПолучитьСообщение", Опции);
Иначе
Результат = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьСообщение", Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
Процедура WebSocket_ОтправитьТекстовоеСообщение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Сообщение = "text-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("text", Сообщение);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ОтправитьТекстовоеСообщение", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("tout", 3000);
Проверка = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ПолучитьСообщение", Опции);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьТекстовоеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьТекстовоеСообщение", "Проверка, " + Постфикс, Сообщение);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
Процедура WebSocket_ОтправитьДвоичноеСообщение(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
ИсходнаяСтрока = "binary-message-" + Формат(ТекущаяДата(), "ДФ=yyyyMMddhhmmss");
Данные = ПолучитьДвоичныеДанныеИзСтроки(ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("data", Данные);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ОтправитьДвоичноеСообщение", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("tout", 3000);
Проверка = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("ws", "ПолучитьСообщение", Опции);
Иначе
Результат = Соединение;
Проверка = Соединение;
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ОтправитьДвоичноеСообщение", Постфикс);
OPI_ПолучениеДанныхТестов.Обработать(Проверка , "WebSocket", "ОтправитьДвоичноеСообщение", "Проверка, " + Постфикс, ИсходнаяСтрока);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
Процедура WebSocket_ПолучитьНастройкиTls(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Результат = OPI_WebSocket.ПолучитьНастройкиTls(Истина);
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ПолучитьНастройкиTls", Постфикс);
КонецПроцедуры
Процедура WebSocket_ЭтоОбъектКлиента(ПараметрыФункции)
Постфикс = ПараметрыФункции["Postfix"];
Соединение = СоздатьКлиентWebSocket(ПараметрыФункции);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
Результат = OPI_WebSocket.ЭтоОбъектКлиента(Соединение);
Иначе
Результат = OPI_WebSocket.ЭтоОбъектКлиента("not-a-client");
КонецЕсли;
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЭтоОбъектКлиента", Постфикс);
Результат = OPI_WebSocket.ЭтоОбъектКлиента("not-a-client");
OPI_ПолучениеДанныхТестов.Обработать(Результат, "WebSocket", "ЭтоОбъектКлиента", "Ложь, " + Постфикс);
Если OPI_WebSocket.ЭтоОбъектКлиента(Соединение) Тогда
OPI_WebSocket.ЗакрытьСоединение(Соединение);
КонецЕсли;
КонецПроцедуры
#КонецОбласти // WebSocket
#КонецОбласти // АтомарныеТесты
#Область ВспомогательныеФункции
Функция СоздатьКлиентWebSocket(ПараметрыФункции)
Адрес = ПолучитьАдресWebSocket(ПараметрыФункции);
НастройкиTls = Неопределено;
НастройкиПрокси = Неопределено;
Заголовки = Новый Структура("X-Trace-Id", "OPI-WS-TEST");
Если ПараметрыФункции["TLS"] Тогда
НастройкиTls = OPI_WebSocket.ПолучитьНастройкиTls(Истина);
КонецЕсли;
Если ПараметрыФункции["Proxy"] Тогда
НастройкиПрокси = OPI_Компоненты.ПолучитьНастройкиПрокси(
ПараметрыФункции["Proxy_IP"],
ПараметрыФункции["Proxy_Port"],
ПараметрыФункции["Proxy_Type"],
ПараметрыФункции["Proxy_User"],
ПараметрыФункции["Proxy_Password"]);
КонецЕсли;
Возврат OPI_WebSocket.ОткрытьСоединение(Адрес, НастройкиTls, НастройкиПрокси, , Заголовки);
КонецФункции
Функция ПолучитьАдресWebSocket(ПараметрыФункции)
Схема = ?(ПараметрыФункции["TLS"], "wss://", "ws://");
Хост = ПараметрыФункции["WS_IP"];
Порт = ПараметрыФункции["WS_Port"];
Возврат СтрШаблон("%1%2:%3", Схема, Хост, Порт);
КонецФункции
#КонецОбласти // ВспомогательныеФункции
#КонецОбласти // СлужебныеПроцедурыИФункции
#Region Alternate
Procedure WS_Client() Export
WS_Клиент();
EndProcedure
#EndRegion

Some files were not shown because too many files have changed in this diff Show More