diff --git a/appveyor.yml b/appveyor.yml index 2af179120..28d530624 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -34,6 +34,10 @@ configuration: # We can re-enable it when we find a way to mitigate the unreliability # issues. Have automated builds be reliable is the more important thing. #cache: build +# +# In case we'd need a RDP detail to login into appveyor +#init: +# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) install: - git submodule update --init --recursive - scripts/install_deps.bat @@ -47,12 +51,15 @@ build_script: - cd %APPVEYOR_BUILD_FOLDER% - scripts\release.bat %CONFIGURATION% -#test_script: -# - cd %APPVEYOR_BUILD_FOLDER%\build\test\%CONFIGURATION% -# - copy "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT\msvc*.dll" . -# - start eth.exe --test -d %TMP%\eth_for_soltest -# - soltest.exe -- --ipc %TMP%\eth_for_soltest\geth.ipc -# - pkill eth +test_script: + - cd %APPVEYOR_BUILD_FOLDER% + - cd deps\install\x64\eth + - ps: $ethProc = Start-Process eth.exe --test + - ps: Start-Sleep -s 100 + - cd %APPVEYOR_BUILD_FOLDER%\build\test\%CONFIGURATION% + - copy "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\x86\Microsoft.VC140.CRT\msvc*.dll" . + - soltest.exe -- --ipcpath \\.\pipe\geth.ipc + - ps: Stop-Process -Id $ethProc.Id artifacts: - path: solidity-windows.zip diff --git a/scripts/install_deps.bat b/scripts/install_deps.bat index 512a28dfa..bd68b07af 100644 --- a/scripts/install_deps.bat +++ b/scripts/install_deps.bat @@ -59,3 +59,4 @@ REM Copyright (c) 2016 solidity contributors. REM --------------------------------------------------------------------------- cmake -P deps\install_deps.cmake +cmake -P scripts\install_eth.cmake diff --git a/scripts/install_eth.cmake b/scripts/install_eth.cmake new file mode 100644 index 000000000..25f449e02 --- /dev/null +++ b/scripts/install_eth.cmake @@ -0,0 +1,76 @@ +#------------------------------------------------------------------------------ +# Cmake script for installing pre-requisite package eth for solidity. +# +# The aim of this script is to simply download and unpack eth binaries to the deps folder. +# +# The documentation for solidity is hosted at: +# +# http://solidity.readthedocs.io/ +# +# ------------------------------------------------------------------------------ +# This file is part of solidity. +# +# solidity is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# solidity is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with solidity. If not, see +# +# (c) 2016 solidity contributors. +#------------------------------------------------------------------------------ + +function(download URL DST_FILE STATUS) + set(TMP_FILE "${DST_FILE}.part") + + get_filename_component(FILE_NAME ${DST_FILE} NAME) + if (NOT EXISTS ${DST_FILE}) + message("Downloading ${FILE_NAME}") + file(DOWNLOAD ${URL} ${TMP_FILE} SHOW_PROGRESS STATUS DOWNLOAD_STATUS) + list(GET DOWNLOAD_STATUS 0 STATUS_CODE) + if (STATUS_CODE EQUAL 0) + file(RENAME ${TMP_FILE} ${DST_FILE}) + else() + file(REMOVE ${TMP_FILE}) + list(GET DOWNLOAD_STATUS 1 ERROR_MSG) + + message("ERROR! Downloading '${FILE_NAME}' failed.") + message(STATUS "URL: ${URL}") + message(STATUS "Error: ${STATUS_CODE} ${ERROR_MSG}") + set(STATUS FALSE PARENT_SCOPE) + return() + endif() + else() + message("Using cached ${FILE_NAME}") + endif() + set(STATUS TRUE PARENT_SCOPE) +endfunction(download) + +function(download_and_unpack PACKAGE_URL DST_DIR) + get_filename_component(FILE_NAME ${PACKAGE_URL} NAME) + + set(DST_FILE "${CACHE_DIR}/${FILE_NAME}") + set(TMP_FILE "${DST_FILE}.part") + + file(MAKE_DIRECTORY ${CACHE_DIR}) + file(MAKE_DIRECTORY ${DST_DIR}) + + download(${PACKAGE_URL} ${DST_FILE} STATUS) + + if (STATUS) + message("Unpacking ${FILE_NAME} to ${DST_DIR}") + execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf ${DST_FILE} + WORKING_DIRECTORY ${DST_DIR}) + endif() +endfunction(download_and_unpack) + +get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) +set(CACHE_DIR "${ROOT_DIR}/deps/cache") +set(INSTALL_DIR "${ROOT_DIR}/deps/install/x64/eth") +download_and_unpack("https://github.com/bobsummerwill/cpp-ethereum/releases/download/develop-v1.3.0.401/cpp-ethereum-develop-windows.zip" ${INSTALL_DIR}) diff --git a/test/RPCSession.cpp b/test/RPCSession.cpp index de10b3819..0a01ddb2d 100644 --- a/test/RPCSession.cpp +++ b/test/RPCSession.cpp @@ -46,7 +46,7 @@ IPCSocket::IPCSocket(string const& _path): m_path(_path) NULL); // no template file if (m_socket == INVALID_HANDLE_VALUE) - BOOST_FAIL("Error creating IPC socket object"); + BOOST_FAIL("Error creating IPC socket object!"); #else if (_path.length() >= sizeof(sockaddr_un::sun_path)) @@ -251,7 +251,7 @@ void RPCSession::test_mineBlocks(int _number) unsigned sleepTime = m_sleepTime; size_t polls = 0; - for (; polls < 10 && !mined; ++polls) + for (; polls < 14 && !mined; ++polls) { std::this_thread::sleep_for(chrono::milliseconds(sleepTime)); if (fromBigEndian(fromHex(rpcCall("eth_blockNumber").asString())) >= startBlock + _number) @@ -270,7 +270,8 @@ void RPCSession::test_mineBlocks(int _number) if (m_successfulMineRuns > 5) { m_successfulMineRuns = 0; - m_sleepTime--; + if (m_sleepTime > 2) + m_sleepTime--; } }