diff --git a/README.md b/README.md index 38a5b68..71ab141 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Build Status](https://clemensv.visualstudio.com/azure-relay-bridge/_apis/build/status/clemensv.azure-relay-bridge?branchName=master)](https://clemensv.visualstudio.com/azure-relay-bridge/_build/latest?definitionId=1&branchName=master) +> _NOTE: This is an unsupported tool that is provided as-is. Azure product support is not available. Any issues must be filed here and there is no guaranteed reaction time for addressing any such issues._ + The Azure Relay Bridge is a tool that allows creating TCP tunnels between any pair of hosts, as long as those hosts each have outbound Internet connectivity on port 443 (HTTPS) to the Azure Relay service. diff --git a/build/repo.props b/build/repo.props index a295979..7aae649 100644 --- a/build/repo.props +++ b/build/repo.props @@ -6,7 +6,7 @@ netcoreapp3.0 $(WindowsFrameworks)$(CoreFrameworks) win7-x64;win7-x86;win10-x64;win10-x86; - osx-x64;debian.10-x64;ubuntu.18.04-x64;opensuse.15.0-x64;fedora.30-x64 + osx-x64;debian.9-x64;debian.10-x64;ubuntu.18.04-x64;opensuse.15.0-x64;fedora.30-x64 $(WindowsRuntimeIdentifiers)$(UnixRuntimeIdentifiers) diff --git a/src/assets/assets.pptx b/src/assets/assets.pptx new file mode 100644 index 0000000..b3573d1 Binary files /dev/null and b/src/assets/assets.pptx differ diff --git a/src/assets/azurerelay.ico b/src/assets/azurerelay.ico new file mode 100644 index 0000000..a22c9fa Binary files /dev/null and b/src/assets/azurerelay.ico differ diff --git a/src/assets/dlgbanner.bmp b/src/assets/dlgbanner.bmp new file mode 100644 index 0000000..ea2356c Binary files /dev/null and b/src/assets/dlgbanner.bmp differ diff --git a/src/assets/dlgbkgnd.bmp b/src/assets/dlgbkgnd.bmp new file mode 100644 index 0000000..3083100 Binary files /dev/null and b/src/assets/dlgbkgnd.bmp differ diff --git a/src/azbridge-installer/Product.wxs b/src/azbridge-installer/Product.wxs index 8207ea7..59e3ec6 100644 --- a/src/azbridge-installer/Product.wxs +++ b/src/azbridge-installer/Product.wxs @@ -1,32 +1,38 @@ - - + + - - - - - + - - + + + + - + + + + + + + + + + + - + @@ -37,33 +43,113 @@ - + - + - + - - + + - - - - - - - - + + + + + + INSTALL_PATH = 1 + + - + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + "1"]]> + + + 1 + + NOT Installed + Installed AND PATCH + + 1 + LicenseAccepted = "1" + + 1 + 1 + NOT WIXUI_DONTVALIDATEPATH + + "1"]]> + + WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1" + 1 + 1 + + 1 + 1 + + NOT Installed + Installed AND NOT PATCH + Installed AND PATCH + + 1 + + 1 + 1 + 1 + + + + + + + \ No newline at end of file diff --git a/src/azbridge-installer/azbridge-installer.wixproj b/src/azbridge-installer/azbridge-installer.wixproj index 0f0582b..6b74970 100644 --- a/src/azbridge-installer/azbridge-installer.wixproj +++ b/src/azbridge-installer/azbridge-installer.wixproj @@ -1,6 +1,6 @@ - + Debug 3.10 @@ -8,13 +8,15 @@ 2.0 azbridge_installer Package + bin\$(Configuration)\$(Platform)\ false false false - ..\azbridge\bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish + ..\azbridge\bin\$(Configuration)\$(Platform)\$(TargetFramework)\$(RuntimeIdentifier)\publish ..\azbridge\azbridge.csproj x64 x86 + ICE30 @@ -96,7 +98,7 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + diff --git a/src/azbridge-installer/build.cmd b/src/azbridge-installer/build.cmd new file mode 100644 index 0000000..84edd81 --- /dev/null +++ b/src/azbridge-installer/build.cmd @@ -0,0 +1 @@ +msbuild /t:publish /p:AlreadyPublished=true /p:TargetFramework=net462 /p:Platform=x64 /p:Configuration=Debug /p:RuntimeIdentifier=win10-x64 diff --git a/src/azbridge-installer/installTransforms.xslt b/src/azbridge-installer/installTransforms.xslt index 7a691df..fc09ee9 100644 --- a/src/azbridge-installer/installTransforms.xslt +++ b/src/azbridge-installer/installTransforms.xslt @@ -1,42 +1,41 @@ - - + + - + + - - - - + {098E424F-CABA-4217-80CC-E4C58D10AE67} + ExeFile + NOT INSTALL_SERVICE + + ExeFileId + + + + {4DD98183-3A32-4F6C-9008-77EE0ED0718A} + SvcFile + INSTALL_SERVICE + + SvcFileId + + + + - + @@ -46,18 +45,18 @@ xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"> - + - + - + - + @@ -66,15 +65,31 @@ xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"> - + - + - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/azbridge-installer/packages.config b/src/azbridge-installer/packages.config index 0cafd56..75b2837 100644 --- a/src/azbridge-installer/packages.config +++ b/src/azbridge-installer/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/src/azbridge-installer/testinstall.cmd b/src/azbridge-installer/testinstall.cmd new file mode 100644 index 0000000..60ed807 --- /dev/null +++ b/src/azbridge-installer/testinstall.cmd @@ -0,0 +1,8 @@ +rem Check whether we are elevated and if not, restart the script elevated: +openfiles >nul 2>&1 +if %ErrorLevel% neq 0 ( + powershell.exe -Command "Start-Process cmd \"%*\" -Verb RunAs" + exit +) + +echo "Hi there" diff --git a/test/docker/.dockerignore b/test/docker/.dockerignore deleted file mode 100644 index 85d6154..0000000 --- a/test/docker/.dockerignore +++ /dev/null @@ -1,10 +0,0 @@ -node_modules -npm-debug.log -Dockerfile* -docker-compose* -.dockerignore -.git -.gitignore -README.md -LICENSE -.vscode \ No newline at end of file diff --git a/test/docker/.gitattributes b/test/docker/.gitattributes deleted file mode 100644 index d767431..0000000 --- a/test/docker/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.txt eol=lf diff --git a/test/docker/runtest.cmd b/test/docker/runtest.cmd deleted file mode 100644 index daa2422..0000000 --- a/test/docker/runtest.cmd +++ /dev/null @@ -1,21 +0,0 @@ -echo off -echo Running %_TESTNAME% -set _OUTFILE=%temp%\azbridge-tests-%_TESTNAME%.output.txt -docker run -v %_MOUNTPATH%:/tests -e AZBRIDGE_TEST_CXNSTRING=%AZBRIDGE_TEST_CXNSTRING% --rm azbridge-test-%ImageName%:latest bash /tests/%_TESTNAME%.sh > %_OUTFILE% -if exist %_MOUNTPATH%\%_TESTNAME%.reference.txt ( - fc /L %_MOUNTPATH%\%_TESTNAME%.reference.txt %_OUTFILE% > NUL - if ERRORLEVEL 1 ( - set _RESULT=%ERRORLEVEL% - type %_OUTFILE% - echo Error %_RESULT% - ) - if ERRORLEVEL 0 ( - set _RESULT=0 - echo OK - ) - del %_OUTFILE% -) else ( - copy /Y %_OUTFILE% %_MOUNTPATH%\%_TESTNAME%.reference.txt > NUL - set _RESULT=%ERRORLEVEL% -) -exit /b %_RESULT% \ No newline at end of file diff --git a/test/docker/runtest.sh b/test/docker/runtest.sh deleted file mode 100644 index ed1ff16..0000000 --- a/test/docker/runtest.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -echo Running $_TESTNAME -_OUTFILE=$(mktemp) -docker run -v $_MOUNTPATH:/tests -e AZBRIDGE_TEST_CXNSTRING="$_CXNSTRING" --rm $IMAGE_NAME:latest bash /tests/$_TESTNAME.sh > $_OUTFILE -if [ -f $_MOUNTPATH/$_TESTNAME.reference.txt ]; then - diff --strip-trailing-cr -B -i -w $_MOUNTPATH/$_TESTNAME.reference.txt $_OUTFILE > /dev/null 2>&1 - _RESULT=$? - if [ $_RESULT -eq 0 ]; then - echo OK - else - diff --strip-trailing-cr -B -i -w $_MOUNTPATH/$_TESTNAME.reference.txt $_OUTFILE - fi -else - cp $_OUTFILE $_MOUNTPATH/$_TESTNAME.reference.txt > /dev/null 2>&1 - _RESULT=0 -fi -rm $_OUTFILE -echo $_TESTNAME done. diff --git a/test/docker/test.cmd b/test/docker/test.cmd deleted file mode 100644 index 1cf3c7f..0000000 --- a/test/docker/test.cmd +++ /dev/null @@ -1,62 +0,0 @@ -rem @echo off - -echo %~1 %~2 %~3 %~4 %~5 %~6 - -if not "%~1" == "" set Operation=%~1 -if not "%~2" == "" set ImageName=%~2 -if not "%~3" == "" set ImageSuffix=%~3 -if not "%~4" == "" set VersionPrefix=%~4 -if not "%~5" == "" set VersionSuffix=%~5 -if not "%~6" == "" set TargetFramework=%~6 - -if "%Operation%"=="" set Operation=build -if "%ImageName%"=="" set ImageName=debian.9-x64 -if "%ImageSuffix%"=="" set ImageSuffix=deb -if "%VersionSuffix%"=="" set VersionSuffix=preview -if "%VersionPrefix%"=="" set VersionPrefix=1.0.0 -if "%TargetFramework%"=="" set TargetFramework=netcoreapp3.0 - -set PackageName=azbridge.%VersionPrefix%-%VersionSuffix%.%ImageName%.%ImageSuffix% - -if "%Operation%"=="build" ( - pushd "%~dp0" - if NOT exist ..\..\artifacts\build\%TargetFramework%\%PackageName% ( - echo Cannot find ..\..\artifacts\build\%TargetFramework%\%PackageName% - exit 2 - ) - if not exist "tmp" mkdir tmp - copy /y ..\..\artifacts\build\%TargetFramework%\%PackageName% tmp > NUL - docker build -f %ImageName%.dockerfile . --tag azbridge-test-%ImageName% --build-arg package_name=%PackageName% - rd /s /q tmp - popd - exit /b -) - -if "%Operation%"=="test" ( - - if %AZBRIDGE_TEST_CXNSTRING% == "" ( - echo AZBRIDGE_TEST_CXNSTRING environment variable must be set to valid relay connection string - exit /b - ) - - set _IMAGE_ID= - - FOR /F %%i IN ("%cd%") DO set _MOUNTPATH=%%~fi - set _TESTNAME=test_nc_ping_pong - call runtest.cmd - if NOT "%_RESULT%"=="0" exit /b %_RESULT% - - set _TESTNAME=test_nc_config_ping_pong - call runtest.cmd - exit /b %_RESULT% -) - -if "%Operation%"=="clean" ( - set IMAGE_NAME=azbridge-test-%ImageName% - for /f %%i in ('docker images %IMAGE_NAME% -q') do set _IMAGE_ID=%%i - if "%_IMAGE_ID%"=="" exit /b - docker rmi -f %IMAGE_NAME%:latest -) -else ( - echo "Unknown operation" -) \ No newline at end of file diff --git a/test/docker/test.sh b/test/docker/test.sh deleted file mode 100644 index b0e8a04..0000000 --- a/test/docker/test.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -if [ ! -z $1 ]; then Operation=$1; fi -if [ ! -z $2 ]; then ImageName=$2; fi -if [ ! -z $3 ]; then ImageSuffix=$3; fi -if [ ! -z $4 ]; then VersionPrefix=$4; fi -if [ ! -z $5 ]; then VersionSuffix=$5; fi -if [ ! -z $6 ]; then TargetFramework=$6; fi - -if [ -z ${Operation+x} ]; then Operation='build'; fi -if [ -z ${ImageName+x} ]; then ImageName='debian.8-x64'; fi -if [ -z ${ImageSuffix+x} ]; then VersionSuffix='deb'; fi -if [ -z ${VersionSuffix+x} ]; then VersionSuffix='preview'; fi -if [ -z ${VersionPrefix+x} ]; then VersionPrefix='1.0.0'; fi -if [ -z ${TargetFramework+x} ]; then TargetFramework='netcoreapp3.0'; fi - -if [ "${Operation}" == "build" ]; then - pushd "${0%/*}" > /dev/null - if [ ! -d "tmp" ]; then mkdir tmp; fi - PackageName=azbridge.$VersionPrefix-$VersionSuffix.$ImageName.$ImageSuffix - - cp ../../artifacts/build/$TargetFramework/$PackageName tmp/ > /dev/null - docker build -f $ImageName.dockerfile . --tag azbridge-test-$ImageName --build-arg package_name=$PackageName - rm -rf tmp - popd -else - if [ "${Operation}" == "test" ]; then - pushd "${0%/*}" > /dev/null - IMAGE_NAME=azbridge-test-$ImageName - _CXNSTRING=$AZBRIDGE_TEST_CXNSTRING - if [ -z $_CXNSTRING ]; then - echo AZBRIDGE_TEST_CXNSTRING environment variable must be set to valid relay connection string - exit - fi - - _MOUNTPATH=$(pwd) - _TESTNAME=test_nc_ping_pong - source runtest.sh - #if [ $_RESULT -ne 0 ]; then exit $_RESULT; fi - - _TESTNAME=test_nc_config_ping_pong - source runtest.sh - popd - #exit $_RESULT - exit - else - if [ "${Operation}" == "clean" ]; then - if [ ! -z `docker images "azbridge-test-$ImageName" -q` ]; then - docker rmi -f azbridge_test_$ImageName:latest - fi - else - echo "Unknown command" - fi - fi -fi \ No newline at end of file diff --git a/test/docker/test_nc_config_ping_pong.reference.txt b/test/docker/test_nc_config_ping_pong.reference.txt deleted file mode 100644 index 8eab844..0000000 --- a/test/docker/test_nc_config_ping_pong.reference.txt +++ /dev/null @@ -1,2 +0,0 @@ -the quick brown fox jumps over the lazy dog -etaoin shrdlu diff --git a/test/docker/test_nc_config_ping_pong.sh b/test/docker/test_nc_config_ping_pong.sh deleted file mode 100755 index 8e68d1c..0000000 --- a/test/docker/test_nc_config_ping_pong.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -/usr/share/azbridge/azbridge -v -l ~/applog.log -x $AZBRIDGE_TEST_CXNSTRING -f /tests/test_nc_config_ping_pong.yml & -L1_PID=$! -sleep 15 -echo "the quick brown fox jumps over the lazy dog" | nc -l 9999 & -sleep 5 -echo "etaoin shrdlu" | nc -w 5 127.0.8.1 8888 -sleep 5 -kill -9 $L1_PID diff --git a/test/docker/test_nc_config_ping_pong.yml b/test/docker/test_nc_config_ping_pong.yml deleted file mode 100644 index fa1bc4c..0000000 --- a/test/docker/test_nc_config_ping_pong.yml +++ /dev/null @@ -1,11 +0,0 @@ -LocalForward: - - RelayName: a1 - BindAddress: 127.0.8.1 - BindPort: 8888 - PortName: test -RemoteForward: - - RelayName: a1 - HostPort: 9999 - Host: localhost - PortName: test - diff --git a/test/docker/test_nc_ping_pong.reference.txt b/test/docker/test_nc_ping_pong.reference.txt deleted file mode 100644 index 8eab844..0000000 --- a/test/docker/test_nc_ping_pong.reference.txt +++ /dev/null @@ -1,2 +0,0 @@ -the quick brown fox jumps over the lazy dog -etaoin shrdlu diff --git a/test/docker/test_nc_ping_pong.sh b/test/docker/test_nc_ping_pong.sh deleted file mode 100755 index ba94b0b..0000000 --- a/test/docker/test_nc_ping_pong.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -/usr/share/azbridge/azbridge -v -l ~/applog.log -x $AZBRIDGE_TEST_CXNSTRING -L 127.0.8.1:8888/test:a1 -R a1:test/9999 & -L1_PID=$! -sleep 15 -echo "the quick brown fox jumps over the lazy dog" | nc -l 9999 & -sleep 5 -echo "etaoin shrdlu" | nc -w 5 127.0.8.1 8888 -sleep 5 -kill -9 $L1_PID diff --git a/test/mysql/.gitignore b/test/mysql/.gitignore new file mode 100644 index 0000000..6774dd5 --- /dev/null +++ b/test/mysql/.gitignore @@ -0,0 +1,2 @@ +downloaded.txt +*.log \ No newline at end of file diff --git a/test/docker/Directory.Build.props b/test/mysql/Directory.Build.props similarity index 82% rename from test/docker/Directory.Build.props rename to test/mysql/Directory.Build.props index 48e19d1..3a0fbcd 100644 --- a/test/docker/Directory.Build.props +++ b/test/mysql/Directory.Build.props @@ -1,3 +1,3 @@ - - + + \ No newline at end of file diff --git a/test/mysql/Test.proj b/test/mysql/Test.proj new file mode 100644 index 0000000..05e3e8b --- /dev/null +++ b/test/mysql/Test.proj @@ -0,0 +1,21 @@ + + + + None + debian.9-x64 + deb + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/mysql/docker-entrypoint.sh b/test/mysql/docker-entrypoint.sh new file mode 100644 index 0000000..26181c4 --- /dev/null +++ b/test/mysql/docker-entrypoint.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +/usr/share/azbridge/azbridge -v -l /tests/applog.log -x $AZBRIDGE_TEST_CXNSTRING -R a2:test/3306 & +mysql-docker-entrypoint.sh $@ diff --git a/test/mysql/my.cnf b/test/mysql/my.cnf new file mode 100644 index 0000000..885a18d --- /dev/null +++ b/test/mysql/my.cnf @@ -0,0 +1,11 @@ +[mysqld] +user=mysql +default_authentication_plugin=mysql_native_password + +[mysql] +user=mysql +password=PaSsWoRd112233 + +[mysql] +user=root +password=PaSsWoRd112233 \ No newline at end of file diff --git a/test/mysql/mysql.client.dockerfile b/test/mysql/mysql.client.dockerfile new file mode 100644 index 0000000..5893869 --- /dev/null +++ b/test/mysql/mysql.client.dockerfile @@ -0,0 +1,6 @@ +FROM debian:stretch AS build +ARG package_name +COPY ./tmp/$package_name . +RUN apt-get update -y +RUN apt-get install -y ./$package_name mysql-client + diff --git a/test/mysql/mysql.server.dockerfile b/test/mysql/mysql.server.dockerfile new file mode 100644 index 0000000..5e3a7b1 --- /dev/null +++ b/test/mysql/mysql.server.dockerfile @@ -0,0 +1,7 @@ +FROM mysql:5 AS build +ARG package_name +COPY ./tmp/$package_name . +RUN apt-get update -y +RUN apt-get install -y ./$package_name +RUN mv /usr/local/bin/docker-entrypoint.sh /usr/local/bin/mysql-docker-entrypoint.sh +COPY docker-entrypoint.sh /usr/local/bin/ diff --git a/test/mysql/run_client.sh b/test/mysql/run_client.sh new file mode 100644 index 0000000..b142eeb --- /dev/null +++ b/test/mysql/run_client.sh @@ -0,0 +1,4 @@ +#!/bin/bash +/usr/share/azbridge/azbridge -v -l /tests/clientlog.log -x $AZBRIDGE_TEST_CXNSTRING -L 127.0.9.1:3306/test:a2 & +sleep 5 +mysql --defaults-extra-file=/tests/my.cnf -h 127.0.9.1 < /tests/test.sql \ No newline at end of file diff --git a/test/mysql/test.cmd b/test/mysql/test.cmd new file mode 100644 index 0000000..e610439 --- /dev/null +++ b/test/mysql/test.cmd @@ -0,0 +1,78 @@ +rem @echo off + +echo %~1 %~2 %~3 %~4 %~5 %~6 + +if not "%~1" == "" set Operation=%~1 +if not "%~2" == "" set ImageName=%~2 +if not "%~3" == "" set ImageSuffix=%~3 +if not "%~4" == "" set VersionPrefix=%~4 +if not "%~5" == "" set VersionSuffix=%~5 +if not "%~6" == "" set TargetFramework=%~6 + +if "%Operation%"=="" set Operation=build +if "%ImageName%"=="" set ImageName=ubuntu.18.04-x64 +if "%ImageSuffix%"=="" set ImageSuffix=deb +if "%VersionSuffix%"=="" set VersionSuffix=preview +if "%VersionPrefix%"=="" set VersionPrefix=1.0.0 +if "%TargetFramework%"=="" set TargetFramework=netcoreapp3.0 + +set PackageName=azbridge.%VersionPrefix%-%VersionSuffix%.%ImageName%.%ImageSuffix% +pushd "%~dp0" +set _MOUNTPATH=%cd% + +if "%Operation%"=="build" ( + + if NOT exist ..\..\artifacts\build\%TargetFramework%\%PackageName% ( + echo Cannot find ..\..\artifacts\build\%TargetFramework%\%PackageName% + exit 2 + ) + if not exist "tmp" mkdir tmp + copy /y ..\..\artifacts\build\%TargetFramework%\%PackageName% tmp > NUL + docker build -f mysql.server.dockerfile . --tag azbridge-mysql-server --build-arg package_name=%PackageName% + docker build -f mysql.client.dockerfile . --tag azbridge-mysql-client --build-arg package_name=%PackageName% + + rd /s /q tmp + popd + exit /b +) + +if "%Operation%"=="test" ( + goto test +) + +if "%Operation%"=="clean" ( + goto clean +) +else ( + echo "Unknown operation" +) + +exit + +:test +if %AZBRIDGE_TEST_CXNSTRING% == "" ( + echo AZBRIDGE_TEST_CXNSTRING environment variable must be set to valid relay connection string + exit /b +) + +rem start the web server +docker run -v %_MOUNTPATH%:/tests -d -v %_MOUNTPATH%/my.cnf:/etc/mysqld/conf.d/my.cnf --rm -d -e AZBRIDGE_TEST_CXNSTRING=%AZBRIDGE_TEST_CXNSTRING% -e MYSQL_ROOT_PASSWORD=PaSsWoRd112233 -e MYSQL_PASSWORD=PaSsWoRd112233 -e MYSQL_USER=mysql azbridge-mysql-server:latest > srvrun.log +for /f %%i in ( srvrun.log ) do set _SERVER_NAME=%%i +rem run the client +ping -n 10 127.0.0.1 > NUL +docker run -v %_MOUNTPATH%:/tests -v %_MOUNTPATH%/my.cnf:/home/mysql/.my.cnf --rm -i -e AZBRIDGE_TEST_CXNSTRING=%AZBRIDGE_TEST_CXNSTRING% azbridge-mysql-client:latest bash /tests/run_client.sh +set RESULT=ERRORLEVEL +rem stop the web server +docker stop %_SERVER_NAME% + +exit %RESULT% + +:clean + +set IMAGE_NAME=%ImageName% +for /f %%i in ('docker images %IMAGE_NAME% -q') do set _IMAGE_ID=%%i +if "%_IMAGE_ID%"=="" exit /b +docker rmi -f %IMAGE_NAME%:latest +exit + + diff --git a/test/mysql/test.sh b/test/mysql/test.sh new file mode 100644 index 0000000..5af3b65 --- /dev/null +++ b/test/mysql/test.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +if [ ! -z $1 ]; then Operation=$1; fi +if [ ! -z $2 ]; then ImageName=$2; fi +if [ ! -z $3 ]; then ImageSuffix=$3; fi +if [ ! -z $4 ]; then VersionPrefix=$4; fi +if [ ! -z $5 ]; then VersionSuffix=$5; fi +if [ ! -z $6 ]; then TargetFramework=$6; fi + +if [ -z ${Operation+x} ]; then Operation='build'; fi +if [ -z ${ImageName+x} ]; then ImageName='ubuntu.18.04-x64'; fi +if [ -z ${ImageSuffix+x} ]; then VersionSuffix='deb'; fi +if [ -z ${VersionSuffix+x} ]; then VersionSuffix='preview'; fi +if [ -z ${VersionPrefix+x} ]; then VersionPrefix='1.0.0'; fi +if [ -z ${TargetFramework+x} ]; then TargetFramework='netcoreapp3.0'; fi + +echo $@ + +PackageName=azbridge.$VersionPrefix-$VersionSuffix.$ImageName.$ImageSuffix + +if [ "${Operation}" == "build" ]; then + pushd "${0%/*}" > /dev/null + if [ ! -d "tmp" ]; then mkdir tmp; fi + + cp ../../artifacts/build/$TargetFramework/$PackageName tmp/ > /dev/null + docker build -f mysql.server.dockerfile . --tag azbridge-mysql-server --build-arg package_name=$PackageName + _RESULT=$? + if [ $_RESULT -ne 0 ]; then + rm -rf tmp + popd + exit $_RESULT + fi + docker build -f mysql.client.dockerfile . --tag azbridge-mysql-client --build-arg package_name=$PackageName + _RESULT=$? + if [ $_RESULT -ne 0 ]; then + rm -rf tmp + popd + exit $_RESULT + fi + rm -rf tmp + popd +else + if [ "${Operation}" == "test" ]; then + pushd "${0%/*}" > /dev/null + IMAGE_NAME=$PackageName + _CXNSTRING=$AZBRIDGE_TEST_CXNSTRING + if [ -z $_CXNSTRING ]; then + echo AZBRIDGE_TEST_CXNSTRING environment variable must be set to valid relay connection string + exit + fi + + # start the web server + server_name=$(docker run -v $(pwd):/tests -d -v $(pwd)/my.cnf:/etc/mysqld/conf.d/my.cnf --rm -d -e AZBRIDGE_TEST_CXNSTRING="$_CXNSTRING" -e MYSQL_ROOT_PASSWORD=PaSsWoRd112233 -e MYSQL_PASSWORD=PaSsWoRd112233 -e MYSQL_USER=mysql azbridge-mysql-server:latest) + # wait for server to start + echo waiting 20 seconds + sleep 20 + # run the client + docker run -v $(pwd):/tests -v $(pwd)/my.cnf:/home/mysql/.my.cnf --rm -i -e AZBRIDGE_TEST_CXNSTRING="$_CXNSTRING" azbridge-mysql-client:latest bash /tests/run_client.sh + _RESULT=$? + # stop the web server + docker stop $server_name + + #diff --strip-trailing-cr -B -i -w downloaded.txt index.html + + if [ $_RESULT -eq 0 ]; then + echo OK + exit 0 + else + echo not ok + exit 1 + fi + else + if [ "${Operation}" == "clean" ]; then + if [ ! -z `docker images "azbridge-mysql-server" -q` ]; then + docker rmi -f azbridge-mysql-server:latest + fi + if [ ! -z `docker images "azbridge-mysql-client" -q` ]; then + docker rmi -f azbridge-mysql-client:latest + fi + else + echo "Unknown command" + fi + fi +fi \ No newline at end of file diff --git a/test/mysql/test.sql b/test/mysql/test.sql new file mode 100644 index 0000000..75eaa69 --- /dev/null +++ b/test/mysql/test.sql @@ -0,0 +1,3 @@ +create database if not exists testdb; +use testdb; +drop database testdb; \ No newline at end of file diff --git a/test/nginx/.gitignore b/test/nginx/.gitignore new file mode 100644 index 0000000..6774dd5 --- /dev/null +++ b/test/nginx/.gitignore @@ -0,0 +1,2 @@ +downloaded.txt +*.log \ No newline at end of file diff --git a/test/nginx/Directory.Build.props b/test/nginx/Directory.Build.props new file mode 100644 index 0000000..3a0fbcd --- /dev/null +++ b/test/nginx/Directory.Build.props @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/test/docker/Test.proj b/test/nginx/Test.proj similarity index 98% rename from test/docker/Test.proj rename to test/nginx/Test.proj index f6427d1..e735b57 100644 --- a/test/docker/Test.proj +++ b/test/nginx/Test.proj @@ -1,54 +1,54 @@ - - - - None - - - - deb - rpm - tar.gz - - - - - - - - - - - - - - - - - - - - - <_BuildRuntimeIdentifier Include="$(UnixRuntimeIdentifiers)" /> - - - - - - - - - <_VSTestRuntimeIdentifier Include="$(UnixRuntimeIdentifiers)" /> - - - - - - - - - <_CleanRuntimeIdentifier Include="$(UnixRuntimeIdentifiers)" /> - - - - + + + + None + + + + deb + rpm + tar.gz + + + + + + + + + + + + + + + + + + + + + <_BuildRuntimeIdentifier Include="$(UnixRuntimeIdentifiers)" /> + + + + + + + + + <_VSTestRuntimeIdentifier Include="$(UnixRuntimeIdentifiers)" /> + + + + + + + + + <_CleanRuntimeIdentifier Include="$(UnixRuntimeIdentifiers)" /> + + + + \ No newline at end of file diff --git a/test/docker/debian.10-x64.dockerfile b/test/nginx/debian.10-x64.client.dockerfile similarity index 55% rename from test/docker/debian.10-x64.dockerfile rename to test/nginx/debian.10-x64.client.dockerfile index 22a3ca5..7768a78 100644 --- a/test/docker/debian.10-x64.dockerfile +++ b/test/nginx/debian.10-x64.client.dockerfile @@ -2,4 +2,5 @@ FROM debian:buster AS build ARG package_name COPY ./tmp/$package_name . RUN apt-get update -y -RUN apt-get install -y apt-utils ./$package_name netcat-openbsd findutils +RUN apt-get install -y ./$package_name wget + diff --git a/test/nginx/debian.10-x64.server.dockerfile b/test/nginx/debian.10-x64.server.dockerfile new file mode 100644 index 0000000..d98062e --- /dev/null +++ b/test/nginx/debian.10-x64.server.dockerfile @@ -0,0 +1,7 @@ +FROM debian:buster AS build +ARG package_name +COPY ./tmp/$package_name . +RUN apt-get update -y +RUN apt-get install -y ./$package_name nginx +COPY index.html /var/www/html + diff --git a/test/nginx/debian.9-x64.client.dockerfile b/test/nginx/debian.9-x64.client.dockerfile new file mode 100644 index 0000000..4cc2602 --- /dev/null +++ b/test/nginx/debian.9-x64.client.dockerfile @@ -0,0 +1,6 @@ +FROM debian:stretch AS build +ARG package_name +COPY ./tmp/$package_name . +RUN apt-get update -y +RUN apt-get install -y ./$package_name wget + diff --git a/test/nginx/debian.9-x64.server.dockerfile b/test/nginx/debian.9-x64.server.dockerfile new file mode 100644 index 0000000..b150c38 --- /dev/null +++ b/test/nginx/debian.9-x64.server.dockerfile @@ -0,0 +1,7 @@ +FROM debian:stretch AS build +ARG package_name +COPY ./tmp/$package_name . +RUN apt-get update -y +RUN apt-get install -y ./$package_name nginx +COPY index.html /var/www/html + diff --git a/test/docker/fedora.30-x64.dockerfile b/test/nginx/fedora.30-x64.client.dockerfile similarity index 51% rename from test/docker/fedora.30-x64.dockerfile rename to test/nginx/fedora.30-x64.client.dockerfile index 51aa6fe..392cf03 100644 --- a/test/docker/fedora.30-x64.dockerfile +++ b/test/nginx/fedora.30-x64.client.dockerfile @@ -1,5 +1,5 @@ FROM fedora:30 AS build ARG package_name COPY ./tmp/$package_name . -RUN yum install -y $package_name -RUN yum install -y nc findutils +RUN yum install -y ./$package_name wget + diff --git a/test/nginx/fedora.30-x64.server.dockerfile b/test/nginx/fedora.30-x64.server.dockerfile new file mode 100644 index 0000000..a3bb6c9 --- /dev/null +++ b/test/nginx/fedora.30-x64.server.dockerfile @@ -0,0 +1,6 @@ +FROM fedora:30 AS build +ARG package_name +COPY ./tmp/$package_name . +RUN yum install -y ./$package_name nginx +COPY index.html /usr/share/nginx/html + diff --git a/test/nginx/index.html b/test/nginx/index.html new file mode 100644 index 0000000..9bb403e --- /dev/null +++ b/test/nginx/index.html @@ -0,0 +1,43 @@ + + + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus aliquam nisi vitae enim ultricies, quis tempor massa sodales. Donec eleifend ligula ipsum, vitae tristique turpis tincidunt at. Nam eleifend semper justo. Aliquam tempor gravida ex id luctus. Donec ante sapien, imperdiet vitae fringilla at, viverra vel nulla. Duis augue est, blandit eget turpis nec, faucibus placerat metus. Nulla sagittis elit nibh, vel rhoncus augue lacinia sed. Vivamus vitae orci vestibulum magna dignissim commodo sit amet aliquet nulla. Fusce posuere faucibus magna, pulvinar blandit enim dignissim sit amet. Nulla elementum nisl eget diam venenatis cursus ac quis elit. Aliquam facilisis sodales eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Suspendisse ullamcorper nulla in libero auctor, sit amet dignissim neque pharetra. Nunc vitae gravida ex. Etiam sem orci, elementum id fringilla a, egestas a lacus. Integer ante lorem, rhoncus in purus sit amet, mollis faucibus elit. Pellentesque eget ex quis dui tincidunt mattis tempus sed quam. Praesent ac vulputate velit. Aliquam erat volutpat. + +Maecenas lacinia ex ut ligula tempus sollicitudin. Nulla facilisi. Donec lacus neque, porttitor eu tellus tincidunt, varius vestibulum augue. Praesent nec aliquet erat, a cursus sem. In quis turpis et ligula rhoncus tristique. Aenean scelerisque dui non metus sagittis efficitur. Vestibulum auctor sapien faucibus est ullamcorper convallis. Nullam fringilla purus sit amet rutrum sollicitudin. Nulla at ante egestas sapien scelerisque iaculis ut id dui. Nunc sagittis sapien nunc, quis iaculis eros luctus vitae. Integer a enim vitae nunc pellentesque tincidunt sit amet eget odio. Etiam vel leo a mi ultricies faucibus sit amet in purus. In fringilla convallis vehicula. Etiam dignissim semper commodo. Quisque euismod sodales rhoncus. Sed dapibus lacinia cursus. + +Sed volutpat lectus nec mauris faucibus varius vel id ante. Sed dictum felis id mi porttitor mattis. Aenean in bibendum risus. Integer massa turpis, venenatis in odio eget, viverra semper ipsum. Suspendisse vel aliquam lorem. Aliquam nec dui ex. Phasellus tristique, neque sed fringilla congue, nisl ipsum hendrerit quam, suscipit laoreet sem lectus ac turpis. Donec rhoncus convallis dapibus. Sed ac dolor eget neque malesuada condimentum id commodo mauris. Maecenas aliquet massa sed magna porttitor feugiat non a ex. + +Nam interdum, ex eget elementum efficitur, lorem urna hendrerit nisl, vitae iaculis ante mauris ut diam. Cras diam ex, aliquet aliquam tristique a, egestas lacinia massa. Aenean et velit vel metus varius porttitor. Vestibulum non sodales velit. Vivamus condimentum justo nec lectus aliquet interdum. Suspendisse in tempus orci, ac interdum nulla. Etiam id tincidunt lacus. Duis commodo ornare lectus, at efficitur turpis tempor sit amet. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus aliquam nisi vitae enim ultricies, quis tempor massa sodales. Donec eleifend ligula ipsum, vitae tristique turpis tincidunt at. Nam eleifend semper justo. Aliquam tempor gravida ex id luctus. Donec ante sapien, imperdiet vitae fringilla at, viverra vel nulla. Duis augue est, blandit eget turpis nec, faucibus placerat metus. Nulla sagittis elit nibh, vel rhoncus augue lacinia sed. Vivamus vitae orci vestibulum magna dignissim commodo sit amet aliquet nulla. Fusce posuere faucibus magna, pulvinar blandit enim dignissim sit amet. Nulla elementum nisl eget diam venenatis cursus ac quis elit. Aliquam facilisis sodales eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Suspendisse ullamcorper nulla in libero auctor, sit amet dignissim neque pharetra. Nunc vitae gravida ex. Etiam sem orci, elementum id fringilla a, egestas a lacus. Integer ante lorem, rhoncus in purus sit amet, mollis faucibus elit. Pellentesque eget ex quis dui tincidunt mattis tempus sed quam. Praesent ac vulputate velit. Aliquam erat volutpat. + +Maecenas lacinia ex ut ligula tempus sollicitudin. Nulla facilisi. Donec lacus neque, porttitor eu tellus tincidunt, varius vestibulum augue. Praesent nec aliquet erat, a cursus sem. In quis turpis et ligula rhoncus tristique. Aenean scelerisque dui non metus sagittis efficitur. Vestibulum auctor sapien faucibus est ullamcorper convallis. Nullam fringilla purus sit amet rutrum sollicitudin. Nulla at ante egestas sapien scelerisque iaculis ut id dui. Nunc sagittis sapien nunc, quis iaculis eros luctus vitae. Integer a enim vitae nunc pellentesque tincidunt sit amet eget odio. Etiam vel leo a mi ultricies faucibus sit amet in purus. In fringilla convallis vehicula. Etiam dignissim semper commodo. Quisque euismod sodales rhoncus. Sed dapibus lacinia cursus. + +Sed volutpat lectus nec mauris faucibus varius vel id ante. Sed dictum felis id mi porttitor mattis. Aenean in bibendum risus. Integer massa turpis, venenatis in odio eget, viverra semper ipsum. Suspendisse vel aliquam lorem. Aliquam nec dui ex. Phasellus tristique, neque sed fringilla congue, nisl ipsum hendrerit quam, suscipit laoreet sem lectus ac turpis. Donec rhoncus convallis dapibus. Sed ac dolor eget neque malesuada condimentum id commodo mauris. Maecenas aliquet massa sed magna porttitor feugiat non a ex. + +Nam interdum, ex eget elementum efficitur, lorem urna hendrerit nisl, vitae iaculis ante mauris ut diam. Cras diam ex, aliquet aliquam tristique a, egestas lacinia massa. Aenean et velit vel metus varius porttitor. Vestibulum non sodales velit. Vivamus condimentum justo nec lectus aliquet interdum. Suspendisse in tempus orci, ac interdum nulla. Etiam id tincidunt lacus. Duis commodo ornare lectus, at efficitur turpis tempor sit amet. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus aliquam nisi vitae enim ultricies, quis tempor massa sodales. Donec eleifend ligula ipsum, vitae tristique turpis tincidunt at. Nam eleifend semper justo. Aliquam tempor gravida ex id luctus. Donec ante sapien, imperdiet vitae fringilla at, viverra vel nulla. Duis augue est, blandit eget turpis nec, faucibus placerat metus. Nulla sagittis elit nibh, vel rhoncus augue lacinia sed. Vivamus vitae orci vestibulum magna dignissim commodo sit amet aliquet nulla. Fusce posuere faucibus magna, pulvinar blandit enim dignissim sit amet. Nulla elementum nisl eget diam venenatis cursus ac quis elit. Aliquam facilisis sodales eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Suspendisse ullamcorper nulla in libero auctor, sit amet dignissim neque pharetra. Nunc vitae gravida ex. Etiam sem orci, elementum id fringilla a, egestas a lacus. Integer ante lorem, rhoncus in purus sit amet, mollis faucibus elit. Pellentesque eget ex quis dui tincidunt mattis tempus sed quam. Praesent ac vulputate velit. Aliquam erat volutpat. + +Maecenas lacinia ex ut ligula tempus sollicitudin. Nulla facilisi. Donec lacus neque, porttitor eu tellus tincidunt, varius vestibulum augue. Praesent nec aliquet erat, a cursus sem. In quis turpis et ligula rhoncus tristique. Aenean scelerisque dui non metus sagittis efficitur. Vestibulum auctor sapien faucibus est ullamcorper convallis. Nullam fringilla purus sit amet rutrum sollicitudin. Nulla at ante egestas sapien scelerisque iaculis ut id dui. Nunc sagittis sapien nunc, quis iaculis eros luctus vitae. Integer a enim vitae nunc pellentesque tincidunt sit amet eget odio. Etiam vel leo a mi ultricies faucibus sit amet in purus. In fringilla convallis vehicula. Etiam dignissim semper commodo. Quisque euismod sodales rhoncus. Sed dapibus lacinia cursus. + +Sed volutpat lectus nec mauris faucibus varius vel id ante. Sed dictum felis id mi porttitor mattis. Aenean in bibendum risus. Integer massa turpis, venenatis in odio eget, viverra semper ipsum. Suspendisse vel aliquam lorem. Aliquam nec dui ex. Phasellus tristique, neque sed fringilla congue, nisl ipsum hendrerit quam, suscipit laoreet sem lectus ac turpis. Donec rhoncus convallis dapibus. Sed ac dolor eget neque malesuada condimentum id commodo mauris. Maecenas aliquet massa sed magna porttitor feugiat non a ex. + +Nam interdum, ex eget elementum efficitur, lorem urna hendrerit nisl, vitae iaculis ante mauris ut diam. Cras diam ex, aliquet aliquam tristique a, egestas lacinia massa. Aenean et velit vel metus varius porttitor. Vestibulum non sodales velit. Vivamus condimentum justo nec lectus aliquet interdum. Suspendisse in tempus orci, ac interdum nulla. Etiam id tincidunt lacus. Duis commodo ornare lectus, at efficitur turpis tempor sit amet. + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus aliquam nisi vitae enim ultricies, quis tempor massa sodales. Donec eleifend ligula ipsum, vitae tristique turpis tincidunt at. Nam eleifend semper justo. Aliquam tempor gravida ex id luctus. Donec ante sapien, imperdiet vitae fringilla at, viverra vel nulla. Duis augue est, blandit eget turpis nec, faucibus placerat metus. Nulla sagittis elit nibh, vel rhoncus augue lacinia sed. Vivamus vitae orci vestibulum magna dignissim commodo sit amet aliquet nulla. Fusce posuere faucibus magna, pulvinar blandit enim dignissim sit amet. Nulla elementum nisl eget diam venenatis cursus ac quis elit. Aliquam facilisis sodales eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +Suspendisse ullamcorper nulla in libero auctor, sit amet dignissim neque pharetra. Nunc vitae gravida ex. Etiam sem orci, elementum id fringilla a, egestas a lacus. Integer ante lorem, rhoncus in purus sit amet, mollis faucibus elit. Pellentesque eget ex quis dui tincidunt mattis tempus sed quam. Praesent ac vulputate velit. Aliquam erat volutpat. + +Maecenas lacinia ex ut ligula tempus sollicitudin. Nulla facilisi. Donec lacus neque, porttitor eu tellus tincidunt, varius vestibulum augue. Praesent nec aliquet erat, a cursus sem. In quis turpis et ligula rhoncus tristique. Aenean scelerisque dui non metus sagittis efficitur. Vestibulum auctor sapien faucibus est ullamcorper convallis. Nullam fringilla purus sit amet rutrum sollicitudin. Nulla at ante egestas sapien scelerisque iaculis ut id dui. Nunc sagittis sapien nunc, quis iaculis eros luctus vitae. Integer a enim vitae nunc pellentesque tincidunt sit amet eget odio. Etiam vel leo a mi ultricies faucibus sit amet in purus. In fringilla convallis vehicula. Etiam dignissim semper commodo. Quisque euismod sodales rhoncus. Sed dapibus lacinia cursus. + +Sed volutpat lectus nec mauris faucibus varius vel id ante. Sed dictum felis id mi porttitor mattis. Aenean in bibendum risus. Integer massa turpis, venenatis in odio eget, viverra semper ipsum. Suspendisse vel aliquam lorem. Aliquam nec dui ex. Phasellus tristique, neque sed fringilla congue, nisl ipsum hendrerit quam, suscipit laoreet sem lectus ac turpis. Donec rhoncus convallis dapibus. Sed ac dolor eget neque malesuada condimentum id commodo mauris. Maecenas aliquet massa sed magna porttitor feugiat non a ex. + +Nam interdum, ex eget elementum efficitur, lorem urna hendrerit nisl, vitae iaculis ante mauris ut diam. Cras diam ex, aliquet aliquam tristique a, egestas lacinia massa. Aenean et velit vel metus varius porttitor. Vestibulum non sodales velit. Vivamus condimentum justo nec lectus aliquet interdum. Suspendisse in tempus orci, ac interdum nulla. Etiam id tincidunt lacus. Duis commodo ornare lectus, at efficitur turpis tempor sit amet. + + \ No newline at end of file diff --git a/test/nginx/opensuse.15.0-x64.client.dockerfile b/test/nginx/opensuse.15.0-x64.client.dockerfile new file mode 100644 index 0000000..60a7b6a --- /dev/null +++ b/test/nginx/opensuse.15.0-x64.client.dockerfile @@ -0,0 +1,6 @@ +FROM opensuse/leap:15 AS build +ARG package_name +COPY ./tmp/$package_name . +RUN zypper --no-gpg-checks --non-interactive install -y ./$package_name +RUN zypper --non-interactive install -y wget + diff --git a/test/docker/opensuse.15.0-x64.dockerfile b/test/nginx/opensuse.15.0-x64.server.dockerfile similarity index 64% rename from test/docker/opensuse.15.0-x64.dockerfile rename to test/nginx/opensuse.15.0-x64.server.dockerfile index a2f088d..ca1ff41 100644 --- a/test/docker/opensuse.15.0-x64.dockerfile +++ b/test/nginx/opensuse.15.0-x64.server.dockerfile @@ -2,4 +2,6 @@ FROM opensuse/leap:15 AS build ARG package_name COPY ./tmp/$package_name . RUN zypper --no-gpg-checks --non-interactive install -y ./$package_name -RUN zypper --non-interactive install -y netcat-openbsd findutils +RUN zypper --non-interactive install -y nginx +COPY index.html /srv/www/htdocs/ + diff --git a/test/nginx/run_client.sh b/test/nginx/run_client.sh new file mode 100644 index 0000000..81a070a --- /dev/null +++ b/test/nginx/run_client.sh @@ -0,0 +1,3 @@ +/usr/share/azbridge/azbridge -v -l /tests/clientlog.log -x $AZBRIDGE_TEST_CXNSTRING -L 127.0.9.1:8088/test:a1 & +sleep 5 +wget -O /tests/downloaded.txt http://127.0.9.1:8088 \ No newline at end of file diff --git a/test/nginx/run_nginx.sh b/test/nginx/run_nginx.sh new file mode 100644 index 0000000..682207b --- /dev/null +++ b/test/nginx/run_nginx.sh @@ -0,0 +1,3 @@ +/usr/share/azbridge/azbridge -v -l /tests/applog.log -x $AZBRIDGE_TEST_CXNSTRING -R a1:test/80 & +sleep 5 +nginx -g 'daemon off;' diff --git a/test/nginx/test.cmd b/test/nginx/test.cmd new file mode 100644 index 0000000..f829efc --- /dev/null +++ b/test/nginx/test.cmd @@ -0,0 +1,90 @@ +rem @echo off + +echo %~1 %~2 %~3 %~4 %~5 %~6 + +if not "%~1" == "" set Operation=%~1 +if not "%~2" == "" set ImageName=%~2 +if not "%~3" == "" set ImageSuffix=%~3 +if not "%~4" == "" set VersionPrefix=%~4 +if not "%~5" == "" set VersionSuffix=%~5 +if not "%~6" == "" set TargetFramework=%~6 + +if "%Operation%"=="" set Operation=build +if "%ImageName%"=="" set ImageName=ubuntu.18.04-x64 +if "%ImageSuffix%"=="" set ImageSuffix=deb +if "%VersionSuffix%"=="" set VersionSuffix=preview +if "%VersionPrefix%"=="" set VersionPrefix=1.0.0 +if "%TargetFramework%"=="" set TargetFramework=netcoreapp3.0 + +pushd "%~dp0" + +set PackageName=azbridge.%VersionPrefix%-%VersionSuffix%.%ImageName%.%ImageSuffix% +set _MOUNTPATH=%cd% + +if "%Operation%"=="build" ( + + if NOT exist ..\..\artifacts\build\%TargetFramework%\%PackageName% ( + echo Cannot find ..\..\artifacts\build\%TargetFramework%\%PackageName% + exit 2 + ) + if not exist "tmp" mkdir tmp + copy /y ..\..\artifacts\build\%TargetFramework%\%PackageName% tmp > NUL + docker build -f %ImageName%.server.dockerfile . --tag azbridge-nginx-server-%ImageName% --build-arg package_name=%PackageName% + docker build -f %ImageName%.client.dockerfile . --tag azbridge-nginx-client-%ImageName% --build-arg package_name=%PackageName% + rd /s /q tmp + popd + exit /b +) + +if "%Operation%"=="test" ( + goto test +) + +if "%Operation%"=="clean" ( + goto clean +) +else ( + echo "Unknown operation" + popd +) +exit + +:test + +if '%AZBRIDGE_TEST_CXNSTRING%' == "" ( + echo AZBRIDGE_TEST_CXNSTRING environment variable must be set to valid relay connection string + exit /b +) + +rem start the web server +docker run -v %_MOUNTPATH%:/tests --rm -d -e AZBRIDGE_TEST_CXNSTRING=%AZBRIDGE_TEST_CXNSTRING% azbridge-nginx-server-%ImageName%:latest bash /tests/run_nginx.sh > srvrun.log +for /f %%i in ( srvrun.log ) do set _SERVER_NAME=%%i +rem run the client +docker run -v %_MOUNTPATH%:/tests --rm -e AZBRIDGE_TEST_CXNSTRING=%AZBRIDGE_TEST_CXNSTRING% azbridge-nginx-client-%ImageName%:latest bash /tests/run_client.sh +rem stop the web server +docker stop %_SERVER_NAME% + +fc /L downloaded.txt index.html > NUL +if ERRORLEVEL 1 ( + set _RESULT=%ERRORLEVEL% + echo Error %_RESULT% +) +if ERRORLEVEL 0 ( + set _RESULT=0 + echo OK +) +popd +exit _RESULT + +:clean + +set IMAGE_NAME=%ImageName% + +for /f %%i in ('docker images azbridge-nginx-server-%IMAGE_NAME% -q') do set _IMAGE_ID=%%i +if "%_IMAGE_ID%"=="" exit /b +docker rmi -f azbridge-nginx-server-%ImageName%:latest + +for /f %%i in ('docker images azbridge-nginx-client-%IMAGE_NAME% -q') do set _IMAGE_ID=%%i +if "%_IMAGE_ID%"=="" exit /b +docker rmi -f azbridge-nginx-client-%ImageName%:latest +popd diff --git a/test/nginx/test.sh b/test/nginx/test.sh new file mode 100644 index 0000000..7a72e8d --- /dev/null +++ b/test/nginx/test.sh @@ -0,0 +1,81 @@ +#!/bin/bash + +if [ ! -z $1 ]; then Operation=$1; fi +if [ ! -z $2 ]; then ImageName=$2; fi +if [ ! -z $3 ]; then ImageSuffix=$3; fi +if [ ! -z $4 ]; then VersionPrefix=$4; fi +if [ ! -z $5 ]; then VersionSuffix=$5; fi +if [ ! -z $6 ]; then TargetFramework=$6; fi + +if [ -z ${Operation+x} ]; then Operation='build'; fi +if [ -z ${ImageName+x} ]; then ImageName='ubuntu.18.04-x64'; fi +if [ -z ${ImageSuffix+x} ]; then VersionSuffix='deb'; fi +if [ -z ${VersionSuffix+x} ]; then VersionSuffix='preview'; fi +if [ -z ${VersionPrefix+x} ]; then VersionPrefix='1.0.0'; fi +if [ -z ${TargetFramework+x} ]; then TargetFramework='netcoreapp3.0'; fi + +echo $@ + +PackageName=azbridge.$VersionPrefix-$VersionSuffix.$ImageName.$ImageSuffix + +if [ "${Operation}" == "build" ]; then + pushd "${0%/*}" > /dev/null + if [ ! -d "tmp" ]; then mkdir tmp; fi + + cp ../../artifacts/build/$TargetFramework/$PackageName tmp/ > /dev/null + docker build -f $ImageName.server.dockerfile . --tag azbridge-nginx-server-$ImageName --build-arg package_name=$PackageName + _RESULT=$? + if [ $_RESULT -ne 0 ]; then + rm -rf tmp + popd + exit $_RESULT + fi + docker build -f $ImageName.client.dockerfile . --tag azbridge-nginx-client-$ImageName --build-arg package_name=$PackageName + _RESULT=$? + if [ $_RESULT -ne 0 ]; then + rm -rf tmp + popd + exit $_RESULT + fi + rm -rf tmp + popd +else + if [ "${Operation}" == "test" ]; then + pushd "${0%/*}" > /dev/null + IMAGE_NAME=$PackageName + _CXNSTRING=$AZBRIDGE_TEST_CXNSTRING + if [ -z $_CXNSTRING ]; then + echo AZBRIDGE_TEST_CXNSTRING environment variable must be set to valid relay connection string + exit + fi + + # start the web server + server_name=$(docker run -v $(pwd):/tests --rm -d -e AZBRIDGE_TEST_CXNSTRING="$_CXNSTRING" azbridge-nginx-server-$ImageName:latest bash /tests/run_nginx.sh) + # run the client + docker run -v $(pwd):/tests --rm -e AZBRIDGE_TEST_CXNSTRING="$_CXNSTRING" azbridge-nginx-client-$ImageName:latest bash /tests/run_client.sh + # stop the web server + docker stop $server_name + + diff --strip-trailing-cr -B -i -w downloaded.txt index.html + _RESULT=$? + rm downloaded.txt + if [ $_RESULT -eq 0 ]; then + echo OK + exit 0 + else + echo not ok + exit 1 + fi + else + if [ "${Operation}" == "clean" ]; then + if [ ! -z `docker images "azbridge-nginx-server-$ImageName" -q` ]; then + docker rmi -f azbridge-nginx-server-$ImageName:latest + fi + if [ ! -z `docker images "azbridge-nginx-client-$ImageName" -q` ]; then + docker rmi -f azbridge-nginx-client-$ImageName:latest + fi + else + echo "Unknown command" + fi + fi +fi \ No newline at end of file diff --git a/test/docker/ubuntu.18.04-x64.dockerfile b/test/nginx/ubuntu.18.04-x64.client.dockerfile similarity index 59% rename from test/docker/ubuntu.18.04-x64.dockerfile rename to test/nginx/ubuntu.18.04-x64.client.dockerfile index 0225399..c333ccb 100644 --- a/test/docker/ubuntu.18.04-x64.dockerfile +++ b/test/nginx/ubuntu.18.04-x64.client.dockerfile @@ -2,5 +2,5 @@ FROM ubuntu:18.04 AS build ARG package_name COPY ./tmp/$package_name . RUN apt-get update -y -RUN apt-get install -y ./$package_name netcat-openbsd findutils +RUN apt-get install -y ./$package_name wget diff --git a/test/nginx/ubuntu.18.04-x64.server.dockerfile b/test/nginx/ubuntu.18.04-x64.server.dockerfile new file mode 100644 index 0000000..6c6733c --- /dev/null +++ b/test/nginx/ubuntu.18.04-x64.server.dockerfile @@ -0,0 +1,7 @@ +FROM ubuntu:18.04 AS build +ARG package_name +COPY ./tmp/$package_name . +RUN apt-get update -y +RUN apt-get install -y ./$package_name nginx +COPY index.html /var/www/html + diff --git a/test/relay_cleanup.sh b/test/relay_cleanup.sh new file mode 100644 index 0000000..099888d --- /dev/null +++ b/test/relay_cleanup.sh @@ -0,0 +1,5 @@ +if [ ! -z $1 ]; then ResourceGroup=$1; fi + +if [ -z ${ResourceGroup+x} ]; then ResourceGroup=$AZBRIDGE_TEST_RESOURCEGROUP; fi + +az group delete --name $ResourceGroup --yes \ No newline at end of file diff --git a/test/relay_setup.sh b/test/relay_setup.sh new file mode 100644 index 0000000..1ec0d58 --- /dev/null +++ b/test/relay_setup.sh @@ -0,0 +1,20 @@ +if [ ! -z $1 ]; then Region=$1; fi +if [ ! -z $2 ]; then ResourceGroup=$2; fi +if [ ! -z $3 ]; then Namespace=$3; fi + +d=$(date +%Y%m%d%H%M%S) + +if [ -z ${Region+x} ]; then Region='westeurope'; fi +if [ -z ${ResourceGroup+x} ]; then ResourceGroup='azbridge'$d; fi +if [ -z ${Namespace+x} ]; then Namespace=$ResourceGroup; fi + +echo $ResourceGroup + +az group create --name $ResourceGroup --location $Region +az relay namespace create --resource-group $ResourceGroup --name $Namespace +az relay namespace authorization-rule create --resource-group $ResourceGroup --namespace-name $Namespace --name SendListen --rights Send Listen +az relay hyco create --resource-group $ResourceGroup --namespace-name $Namespace --name a1 +az relay hyco create --resource-group $ResourceGroup --namespace-name $Namespace --name a2 +export AZBRIDGE_TEST_CXNSTRING=$(az relay namespace authorization-rule keys list --resource-group $ResourceGroup --namespace-name $Namespace --name SendListen --query 'primaryConnectionString' -o json) +export AZBRIDGE_TEST_RESOURCEGROUP=$ResourceGroup +export AZBRIDGE_TEST_NAMESPACE=$Namespace \ No newline at end of file diff --git a/test/test_nc_config_ping_pong.reference.txt b/test/test_nc_config_ping_pong.reference.txt deleted file mode 100644 index e69de29..0000000 diff --git a/test/test_nc_ping_pong.reference.txt b/test/test_nc_ping_pong.reference.txt deleted file mode 100644 index e69de29..0000000 diff --git a/verify-build.cmd b/verify-build.cmd index d939888..bfeff69 100644 --- a/verify-build.cmd +++ b/verify-build.cmd @@ -5,6 +5,10 @@ where %xunitrunner% 2>&1 if ERRORLEVEL 1 set xunitrunner=C:\Tools\xUnit20\xunit.console.exe "%xunitrunner%" "test\unit\Microsoft.Azure.Relay.Bridge.Tests\bin\Debug\net462\Microsoft.Azure.Relay.Bridge.Tests.dll" -appveyor -rem cd test\docker +rem cd test\nginx rem msbuild /t:clean,build,vstest rem popd + + + + diff --git a/verify-build.sh b/verify-build.sh index cee1880..66e661e 100755 --- a/verify-build.sh +++ b/verify-build.sh @@ -3,7 +3,13 @@ if [ ! -z $APPVEYOR_BUILD_VERSION ]; then _VersionProp="/p:VersionPrefix=$APPVEYOR_BUILD_VERSION"; fi dotnet test --verbosity=normal /p:SelfContained=false -#cd test/docker -#dotnet clean --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ -#dotnet build --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ -#dotnet test --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +pushd test/mysql +dotnet clean --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +dotnet msbuild /t:build --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +dotnet test --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +popd +pushd test/nginx +dotnet clean --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +dotnet msbuild /t:build --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +dotnet test --verbosity=normal /p:Configuration=Debug /p:TargetFramework=netcoreapp3.0 $_BuildProp $_VersionProp $@ +popd