diff options
| -rw-r--r-- | indra/cmake/LLAddBuildTest.cmake | 538 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 2 | ||||
| -rw-r--r-- | indra/viewer_components/updater/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | indra/viewer_components/updater/llupdatedownloader.h | 5 | ||||
| -rw-r--r-- | indra/viewer_components/updater/llupdaterservice.cpp | 141 | ||||
| -rw-r--r-- | indra/viewer_components/updater/llupdaterservice.h | 20 | ||||
| -rw-r--r--[-rwxr-xr-x] | indra/viewer_components/updater/scripts/darwin/update_install | 0 | ||||
| -rw-r--r-- | indra/viewer_components/updater/tests/llupdaterservice_test.cpp | 89 | 
8 files changed, 472 insertions, 332 deletions
| diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index 79c3bb7da2..29e2492551 100644 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake @@ -1,265 +1,273 @@ -# -*- cmake -*- -include(LLTestCommand) -include(GoogleMock) - -MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources) -  # Given a project name and a list of sourcefiles (with optional properties on each), -  # add targets to build and run the tests specified. -  # ASSUMPTIONS: -  # * this macro is being executed in the project file that is passed in -  # * current working SOURCE dir is that project dir -  # * there is a subfolder tests/ with test code corresponding to the filenames passed in -  # * properties for each sourcefile passed in indicate what libs to link that file with (MAKE NO ASSUMPTIONS ASIDE FROM TUT) -  # -  # More info and examples at: https://wiki.secondlife.com/wiki/How_to_add_unit_tests_to_indra_code -  # -  # WARNING: do NOT modify this code without working with poppy - -  # there is another branch that will conflict heavily with any changes here. -INCLUDE(GoogleMock) - - -  IF(LL_TEST_VERBOSE) -    MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} sources: ${sources}") -  ENDIF(LL_TEST_VERBOSE) - -  # Start with the header and project-wide setup before making targets -  #project(UNITTEST_PROJECT_${project}) -  # Setup includes, paths, etc -  SET(alltest_SOURCE_FILES -    ${CMAKE_SOURCE_DIR}/test/test.cpp -    ${CMAKE_SOURCE_DIR}/test/lltut.cpp -    ) -  SET(alltest_DEP_TARGETS -    # needed by the test harness itself -    ${APRUTIL_LIBRARIES} -    ${APR_LIBRARIES} -    llcommon -    ) -  IF(NOT "${project}" STREQUAL "llmath") -    # add llmath as a dep unless the tested module *is* llmath! -    LIST(APPEND alltest_DEP_TARGETS -      llmath -      ) -  ENDIF(NOT "${project}" STREQUAL "llmath") -  SET(alltest_INCLUDE_DIRS -    ${LLMATH_INCLUDE_DIRS} -    ${LLCOMMON_INCLUDE_DIRS} -    ${LIBS_OPEN_DIR}/test -    ${GOOGLEMOCK_INCLUDE_DIRS} -    ) -  SET(alltest_LIBRARIES -    ${GOOGLEMOCK_LIBRARIES} -    ${PTHREAD_LIBRARY} -    ${WINDOWS_LIBRARIES} -    ) -  # Headers, for convenience in targets. -  SET(alltest_HEADER_FILES -    ${CMAKE_SOURCE_DIR}/test/test.h -    ) - -  # Use the default flags -  if (LINUX) -    SET(CMAKE_EXE_LINKER_FLAGS "") -  endif (LINUX) - -  # start the source test executable definitions -  SET(${project}_TEST_OUTPUT "") -  FOREACH (source ${sources}) -    STRING( REGEX REPLACE "(.*)\\.[^.]+$" "\\1" name ${source} ) -    STRING( REGEX REPLACE ".*\\.([^.]+)$" "\\1" extension ${source} ) -    IF(LL_TEST_VERBOSE) -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} individual source: ${source} (${name}.${extension})") -    ENDIF(LL_TEST_VERBOSE) - -    # -    # Per-codefile additional / external source, header, and include dir property extraction -    # -    # Source -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_SOURCE_FILES ${source} LL_TEST_ADDITIONAL_SOURCE_FILES) -    IF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND) -      SET(${name}_test_additional_SOURCE_FILES "") -    ENDIF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND) -    SET(${name}_test_SOURCE_FILES ${source} tests/${name}_test.${extension} ${alltest_SOURCE_FILES} ${${name}_test_additional_SOURCE_FILES} ) -    IF(LL_TEST_VERBOSE) -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_SOURCE_FILES ${${name}_test_SOURCE_FILES}") -    ENDIF(LL_TEST_VERBOSE) -    # Headers -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_HEADER_FILES ${source} LL_TEST_ADDITIONAL_HEADER_FILES) -    IF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND) -      SET(${name}_test_additional_HEADER_FILES "") -    ENDIF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND) -    SET(${name}_test_HEADER_FILES ${name}.h ${${name}_test_additional_HEADER_FILES}) -    set_source_files_properties(${${name}_test_HEADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE) -    LIST(APPEND ${name}_test_SOURCE_FILES ${${name}_test_HEADER_FILES}) -    IF(LL_TEST_VERBOSE) -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_HEADER_FILES ${${name}_test_HEADER_FILES}") -    ENDIF(LL_TEST_VERBOSE) -    # Include dirs -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_INCLUDE_DIRS ${source} LL_TEST_ADDITIONAL_INCLUDE_DIRS) -    IF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND) -      SET(${name}_test_additional_INCLUDE_DIRS "") -    ENDIF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND) -    INCLUDE_DIRECTORIES(${alltest_INCLUDE_DIRS} ${name}_test_additional_INCLUDE_DIRS ) -    IF(LL_TEST_VERBOSE) -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_INCLUDE_DIRS ${${name}_test_additional_INCLUDE_DIRS}") -    ENDIF(LL_TEST_VERBOSE) - - -    # Setup target -    ADD_EXECUTABLE(PROJECT_${project}_TEST_${name} ${${name}_test_SOURCE_FILES}) -    SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") - -    # -    # Per-codefile additional / external project dep and lib dep property extraction -    # -    # WARNING: it's REALLY IMPORTANT to not mix these. I guarantee it will not work in the future. + poppy 2009-04-19 -    # Projects -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_PROJECTS ${source} LL_TEST_ADDITIONAL_PROJECTS) -    IF(${name}_test_additional_PROJECTS MATCHES NOTFOUND) -      SET(${name}_test_additional_PROJECTS "") -    ENDIF(${name}_test_additional_PROJECTS MATCHES NOTFOUND) -    # Libraries -    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_LIBRARIES ${source} LL_TEST_ADDITIONAL_LIBRARIES) -    IF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND) -      SET(${name}_test_additional_LIBRARIES "") -    ENDIF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND) -    IF(LL_TEST_VERBOSE) -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_PROJECTS ${${name}_test_additional_PROJECTS}") -      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_LIBRARIES ${${name}_test_additional_LIBRARIES}") -    ENDIF(LL_TEST_VERBOSE) -    # Add to project -    TARGET_LINK_LIBRARIES(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${alltest_DEP_TARGETS} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} ) -     -    # -    # Setup test targets -    # -    GET_TARGET_PROPERTY(TEST_EXE PROJECT_${project}_TEST_${name} LOCATION) -    SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt) -    SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR}) - -    # daveh - what configuration does this use? Debug? it's cmake-time, not build time. + poppy 2009-04-19 -    IF(LL_TEST_VERBOSE) -      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd  = ${TEST_CMD}") -    ENDIF(LL_TEST_VERBOSE) - -    SET_TEST_PATH(LD_LIBRARY_PATH) -    LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${TEST_CMD}) -    IF(LL_TEST_VERBOSE) -      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script  = ${TEST_SCRIPT_CMD}") -    ENDIF(LL_TEST_VERBOSE) -    # Add test  -    ADD_CUSTOM_COMMAND( -        OUTPUT ${TEST_OUTPUT} -        COMMAND ${TEST_SCRIPT_CMD} -        DEPENDS PROJECT_${project}_TEST_${name} -        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -        ) -    # Why not add custom target and add POST_BUILD command? -    # Slightly less uncertain behavior -    # (OUTPUT commands run non-deterministically AFAIK) + poppy 2009-04-19 -    # > I did not use a post build step as I could not make it notify of a  -    # > failure after the first time you build and fail a test. - daveh 2009-04-20 -    LIST(APPEND ${project}_TEST_OUTPUT ${TEST_OUTPUT}) -  ENDFOREACH (source) - -  # Add the test runner target per-project -  # (replaces old _test_ok targets all over the place) -  ADD_CUSTOM_TARGET(${project}_tests ALL DEPENDS ${${project}_TEST_OUTPUT}) -  ADD_DEPENDENCIES(${project} ${project}_tests) -ENDMACRO(LL_ADD_PROJECT_UNIT_TESTS) - -FUNCTION(LL_ADD_INTEGRATION_TEST  -    testname -    additional_source_files -    library_dependencies -# variable args -    ) -  if(TEST_DEBUG) -    message(STATUS "Adding INTEGRATION_TEST_${testname} - debug output is on") -  endif(TEST_DEBUG) -   -  SET(source_files -    tests/${testname}_test.cpp -    ${CMAKE_SOURCE_DIR}/test/test.cpp -    ${CMAKE_SOURCE_DIR}/test/lltut.cpp -    ${additional_source_files} -    ) - -  SET(libraries -    ${library_dependencies} -    ${GOOGLEMOCK_LIBRARIES} -    ${PTHREAD_LIBRARY} -    ) - -  # Add test executable build target -  if(TEST_DEBUG) -    message(STATUS "ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})") -  endif(TEST_DEBUG) -  ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files}) -  SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}") - -  # Add link deps to the executable -  if(TEST_DEBUG) -    message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})") -  endif(TEST_DEBUG) -  TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries}) - -  # Create the test running command -  SET(test_command ${ARGN}) -  GET_TARGET_PROPERTY(TEST_EXE INTEGRATION_TEST_${testname} LOCATION) -  LIST(FIND test_command "{}" test_exe_pos) -  IF(test_exe_pos LESS 0) -    # The {} marker means "the full pathname of the test executable." -    # test_exe_pos -1 means we didn't find it -- so append the test executable -    # name to $ARGN, the variable part of the arg list. This is convenient -    # shorthand for both straightforward execution of the test program (empty -    # $ARGN) and for running a "wrapper" program of some kind accepting the -    # pathname of the test program as the last of its args. You need specify -    # {} only if the test program's pathname isn't the last argument in the -    # desired command line. -    LIST(APPEND test_command "${TEST_EXE}") -  ELSE (test_exe_pos LESS 0) -    # Found {} marker at test_exe_pos. Remove the {}... -    LIST(REMOVE_AT test_command test_exe_pos) -    # ...and replace it with the actual name of the test executable. -    LIST(INSERT test_command test_exe_pos "${TEST_EXE}") -  ENDIF (test_exe_pos LESS 0) - -  SET_TEST_PATH(LD_LIBRARY_PATH) -  LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${test_command}) - -  if(TEST_DEBUG) -    message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}") -  endif(TEST_DEBUG) - -  ADD_CUSTOM_COMMAND( -    TARGET INTEGRATION_TEST_${testname} -    POST_BUILD -    COMMAND ${TEST_SCRIPT_CMD} -    ) - -  # Use CTEST? Not sure how to yet... -  # ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD}) - -ENDFUNCTION(LL_ADD_INTEGRATION_TEST) - -MACRO(SET_TEST_PATH LISTVAR) -  IF(WINDOWS) -    # We typically build/package only Release variants of third-party -    # libraries, so append the Release staging dir in case the library being -    # sought doesn't have a debug variant. -    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} ${SHARED_LIB_STAGING_DIR}/Release) -  ELSEIF(DARWIN) -    # We typically build/package only Release variants of third-party -    # libraries, so append the Release staging dir in case the library being -    # sought doesn't have a debug variant. -    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib) -  ELSE(WINDOWS) -    # Linux uses a single staging directory anyway. -    IF (STANDALONE) -      set(${LISTVAR} ${CMAKE_BINARY_DIR}/llcommon /usr/lib /usr/local/lib) -    ELSE (STANDALONE) -      set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib) -    ENDIF (STANDALONE) -  ENDIF(WINDOWS) -ENDMACRO(SET_TEST_PATH) +# -*- cmake -*-
 +include(LLTestCommand)
 +include(GoogleMock)
 +
 +MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
 +  # Given a project name and a list of sourcefiles (with optional properties on each),
 +  # add targets to build and run the tests specified.
 +  # ASSUMPTIONS:
 +  # * this macro is being executed in the project file that is passed in
 +  # * current working SOURCE dir is that project dir
 +  # * there is a subfolder tests/ with test code corresponding to the filenames passed in
 +  # * properties for each sourcefile passed in indicate what libs to link that file with (MAKE NO ASSUMPTIONS ASIDE FROM TUT)
 +  #
 +  # More info and examples at: https://wiki.secondlife.com/wiki/How_to_add_unit_tests_to_indra_code
 +  #
 +  # WARNING: do NOT modify this code without working with poppy -
 +  # there is another branch that will conflict heavily with any changes here.
 +INCLUDE(GoogleMock)
 +
 +
 +  IF(LL_TEST_VERBOSE)
 +    MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} sources: ${sources}")
 +  ENDIF(LL_TEST_VERBOSE)
 +
 +  # Start with the header and project-wide setup before making targets
 +  #project(UNITTEST_PROJECT_${project})
 +  # Setup includes, paths, etc
 +  SET(alltest_SOURCE_FILES
 +    ${CMAKE_SOURCE_DIR}/test/test.cpp
 +    ${CMAKE_SOURCE_DIR}/test/lltut.cpp
 +    )
 +  SET(alltest_DEP_TARGETS
 +    # needed by the test harness itself
 +    ${APRUTIL_LIBRARIES}
 +    ${APR_LIBRARIES}
 +    llcommon
 +    )
 +  IF(NOT "${project}" STREQUAL "llmath")
 +    # add llmath as a dep unless the tested module *is* llmath!
 +    LIST(APPEND alltest_DEP_TARGETS
 +      llmath
 +      )
 +  ENDIF(NOT "${project}" STREQUAL "llmath")
 +  SET(alltest_INCLUDE_DIRS
 +    ${LLMATH_INCLUDE_DIRS}
 +    ${LLCOMMON_INCLUDE_DIRS}
 +    ${LIBS_OPEN_DIR}/test
 +    ${GOOGLEMOCK_INCLUDE_DIRS}
 +    )
 +  SET(alltest_LIBRARIES
 +    ${GOOGLEMOCK_LIBRARIES}
 +    ${PTHREAD_LIBRARY}
 +    ${WINDOWS_LIBRARIES}
 +    )
 +  # Headers, for convenience in targets.
 +  SET(alltest_HEADER_FILES
 +    ${CMAKE_SOURCE_DIR}/test/test.h
 +    )
 +
 +  # Use the default flags
 +  if (LINUX)
 +    SET(CMAKE_EXE_LINKER_FLAGS "")
 +  endif (LINUX)
 +
 +  # start the source test executable definitions
 +  SET(${project}_TEST_OUTPUT "")
 +  FOREACH (source ${sources})
 +    STRING( REGEX REPLACE "(.*)\\.[^.]+$" "\\1" name ${source} )
 +    STRING( REGEX REPLACE ".*\\.([^.]+)$" "\\1" extension ${source} )
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS UNITTEST_PROJECT_${project} individual source: ${source} (${name}.${extension})")
 +    ENDIF(LL_TEST_VERBOSE)
 +
 +    #
 +    # Per-codefile additional / external source, header, and include dir property extraction
 +    #
 +    # Source
 +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_SOURCE_FILES ${source} LL_TEST_ADDITIONAL_SOURCE_FILES)
 +    IF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND)
 +      SET(${name}_test_additional_SOURCE_FILES "")
 +    ENDIF(${name}_test_additional_SOURCE_FILES MATCHES NOTFOUND)
 +    SET(${name}_test_SOURCE_FILES ${source} tests/${name}_test.${extension} ${alltest_SOURCE_FILES} ${${name}_test_additional_SOURCE_FILES} )
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_SOURCE_FILES ${${name}_test_SOURCE_FILES}")
 +    ENDIF(LL_TEST_VERBOSE)
 +    # Headers
 +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_HEADER_FILES ${source} LL_TEST_ADDITIONAL_HEADER_FILES)
 +    IF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND)
 +      SET(${name}_test_additional_HEADER_FILES "")
 +    ENDIF(${name}_test_additional_HEADER_FILES MATCHES NOTFOUND)
 +    SET(${name}_test_HEADER_FILES ${name}.h ${${name}_test_additional_HEADER_FILES})
 +    set_source_files_properties(${${name}_test_HEADER_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
 +    LIST(APPEND ${name}_test_SOURCE_FILES ${${name}_test_HEADER_FILES})
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_HEADER_FILES ${${name}_test_HEADER_FILES}")
 +    ENDIF(LL_TEST_VERBOSE)
 +    # Include dirs
 +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_INCLUDE_DIRS ${source} LL_TEST_ADDITIONAL_INCLUDE_DIRS)
 +    IF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND)
 +      SET(${name}_test_additional_INCLUDE_DIRS "")
 +    ENDIF(${name}_test_additional_INCLUDE_DIRS MATCHES NOTFOUND)
 +    INCLUDE_DIRECTORIES(${alltest_INCLUDE_DIRS} ${name}_test_additional_INCLUDE_DIRS )
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_INCLUDE_DIRS ${${name}_test_additional_INCLUDE_DIRS}")
 +    ENDIF(LL_TEST_VERBOSE)
 +
 +
 +    # Setup target
 +    ADD_EXECUTABLE(PROJECT_${project}_TEST_${name} ${${name}_test_SOURCE_FILES})
 +    SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
 +
 +    #
 +    # Per-codefile additional / external project dep and lib dep property extraction
 +    #
 +    # WARNING: it's REALLY IMPORTANT to not mix these. I guarantee it will not work in the future. + poppy 2009-04-19
 +    # Projects
 +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_PROJECTS ${source} LL_TEST_ADDITIONAL_PROJECTS)
 +    IF(${name}_test_additional_PROJECTS MATCHES NOTFOUND)
 +      SET(${name}_test_additional_PROJECTS "")
 +    ENDIF(${name}_test_additional_PROJECTS MATCHES NOTFOUND)
 +    # Libraries
 +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_LIBRARIES ${source} LL_TEST_ADDITIONAL_LIBRARIES)
 +    IF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND)
 +      SET(${name}_test_additional_LIBRARIES "")
 +    ENDIF(${name}_test_additional_LIBRARIES MATCHES NOTFOUND)
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_PROJECTS ${${name}_test_additional_PROJECTS}")
 +      MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_LIBRARIES ${${name}_test_additional_LIBRARIES}")
 +    ENDIF(LL_TEST_VERBOSE)
 +    # Add to project
 +    TARGET_LINK_LIBRARIES(PROJECT_${project}_TEST_${name} ${alltest_LIBRARIES} ${alltest_DEP_TARGETS} ${${name}_test_additional_PROJECTS} ${${name}_test_additional_LIBRARIES} )
 +    # Compile-time Definitions
 +    GET_SOURCE_FILE_PROPERTY(${name}_test_additional_CFLAGS ${source} LL_TEST_ADDITIONAL_CFLAGS)
 +     IF(NOT ${name}_test_additional_CFLAGS MATCHES NOTFOUND)
 +       SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES COMPILE_FLAGS ${${name}_test_additional_CFLAGS} )
 +       IF(LL_TEST_VERBOSE)
 +         MESSAGE("LL_ADD_PROJECT_UNIT_TESTS ${name}_test_additional_CFLAGS ${${name}_test_additional_CFLAGS}")
 +       ENDIF(LL_TEST_VERBOSE)
 +     ENDIF(NOT ${name}_test_additional_CFLAGS MATCHES NOTFOUND)
 +     
 +    #
 +    # Setup test targets
 +    #
 +    GET_TARGET_PROPERTY(TEST_EXE PROJECT_${project}_TEST_${name} LOCATION)
 +    SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt)
 +    SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR})
 +
 +    # daveh - what configuration does this use? Debug? it's cmake-time, not build time. + poppy 2009-04-19
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd  = ${TEST_CMD}")
 +    ENDIF(LL_TEST_VERBOSE)
 +
 +    SET_TEST_PATH(LD_LIBRARY_PATH)
 +    LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${TEST_CMD})
 +    IF(LL_TEST_VERBOSE)
 +      MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script  = ${TEST_SCRIPT_CMD}")
 +    ENDIF(LL_TEST_VERBOSE)
 +    # Add test 
 +    ADD_CUSTOM_COMMAND(
 +        OUTPUT ${TEST_OUTPUT}
 +        COMMAND ${TEST_SCRIPT_CMD}
 +        DEPENDS PROJECT_${project}_TEST_${name}
 +        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 +        )
 +    # Why not add custom target and add POST_BUILD command?
 +    # Slightly less uncertain behavior
 +    # (OUTPUT commands run non-deterministically AFAIK) + poppy 2009-04-19
 +    # > I did not use a post build step as I could not make it notify of a 
 +    # > failure after the first time you build and fail a test. - daveh 2009-04-20
 +    LIST(APPEND ${project}_TEST_OUTPUT ${TEST_OUTPUT})
 +  ENDFOREACH (source)
 +
 +  # Add the test runner target per-project
 +  # (replaces old _test_ok targets all over the place)
 +  ADD_CUSTOM_TARGET(${project}_tests ALL DEPENDS ${${project}_TEST_OUTPUT})
 +  ADD_DEPENDENCIES(${project} ${project}_tests)
 +ENDMACRO(LL_ADD_PROJECT_UNIT_TESTS)
 +
 +FUNCTION(LL_ADD_INTEGRATION_TEST 
 +    testname
 +    additional_source_files
 +    library_dependencies
 +# variable args
 +    )
 +  if(TEST_DEBUG)
 +    message(STATUS "Adding INTEGRATION_TEST_${testname} - debug output is on")
 +  endif(TEST_DEBUG)
 +  
 +  SET(source_files
 +    tests/${testname}_test.cpp
 +    ${CMAKE_SOURCE_DIR}/test/test.cpp
 +    ${CMAKE_SOURCE_DIR}/test/lltut.cpp
 +    ${additional_source_files}
 +    )
 +
 +  SET(libraries
 +    ${library_dependencies}
 +    ${GOOGLEMOCK_LIBRARIES}
 +    ${PTHREAD_LIBRARY}
 +    )
 +
 +  # Add test executable build target
 +  if(TEST_DEBUG)
 +    message(STATUS "ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})")
 +  endif(TEST_DEBUG)
 +  ADD_EXECUTABLE(INTEGRATION_TEST_${testname} ${source_files})
 +  SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
 +
 +  # Add link deps to the executable
 +  if(TEST_DEBUG)
 +    message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})")
 +  endif(TEST_DEBUG)
 +  TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})
 +
 +  # Create the test running command
 +  SET(test_command ${ARGN})
 +  GET_TARGET_PROPERTY(TEST_EXE INTEGRATION_TEST_${testname} LOCATION)
 +  LIST(FIND test_command "{}" test_exe_pos)
 +  IF(test_exe_pos LESS 0)
 +    # The {} marker means "the full pathname of the test executable."
 +    # test_exe_pos -1 means we didn't find it -- so append the test executable
 +    # name to $ARGN, the variable part of the arg list. This is convenient
 +    # shorthand for both straightforward execution of the test program (empty
 +    # $ARGN) and for running a "wrapper" program of some kind accepting the
 +    # pathname of the test program as the last of its args. You need specify
 +    # {} only if the test program's pathname isn't the last argument in the
 +    # desired command line.
 +    LIST(APPEND test_command "${TEST_EXE}")
 +  ELSE (test_exe_pos LESS 0)
 +    # Found {} marker at test_exe_pos. Remove the {}...
 +    LIST(REMOVE_AT test_command test_exe_pos)
 +    # ...and replace it with the actual name of the test executable.
 +    LIST(INSERT test_command test_exe_pos "${TEST_EXE}")
 +  ENDIF (test_exe_pos LESS 0)
 +
 +  SET_TEST_PATH(LD_LIBRARY_PATH)
 +  LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${test_command})
 +
 +  if(TEST_DEBUG)
 +    message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}")
 +  endif(TEST_DEBUG)
 +
 +  ADD_CUSTOM_COMMAND(
 +    TARGET INTEGRATION_TEST_${testname}
 +    POST_BUILD
 +    COMMAND ${TEST_SCRIPT_CMD}
 +    )
 +
 +  # Use CTEST? Not sure how to yet...
 +  # ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD})
 +
 +ENDFUNCTION(LL_ADD_INTEGRATION_TEST)
 +
 +MACRO(SET_TEST_PATH LISTVAR)
 +  IF(WINDOWS)
 +    # We typically build/package only Release variants of third-party
 +    # libraries, so append the Release staging dir in case the library being
 +    # sought doesn't have a debug variant.
 +    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} ${SHARED_LIB_STAGING_DIR}/Release)
 +  ELSEIF(DARWIN)
 +    # We typically build/package only Release variants of third-party
 +    # libraries, so append the Release staging dir in case the library being
 +    # sought doesn't have a debug variant.
 +    set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib)
 +  ELSE(WINDOWS)
 +    # Linux uses a single staging directory anyway.
 +    IF (STANDALONE)
 +      set(${LISTVAR} ${CMAKE_BINARY_DIR}/llcommon /usr/lib /usr/local/lib)
 +    ELSE (STANDALONE)
 +      set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
 +    ENDIF (STANDALONE)
 +  ENDIF(WINDOWS)
 +ENDMACRO(SET_TEST_PATH)
 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 438f8668ae..10c03954bc 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2383,7 +2383,7 @@ void LLAppViewer::initUpdater()  	std::string service_path = gSavedSettings.getString("UpdaterServicePath");  	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod"); -	mUpdater->setParams(protocol_version, url, service_path, channel, version); +	mUpdater->initialize(protocol_version, url, service_path, channel, version);  	mUpdater->setCheckPeriod(check_period);  	if(gSavedSettings.getBOOL("UpdaterServiceActive"))  	{ diff --git a/indra/viewer_components/updater/CMakeLists.txt b/indra/viewer_components/updater/CMakeLists.txt index 7657dd4517..c5ccfbf66a 100644 --- a/indra/viewer_components/updater/CMakeLists.txt +++ b/indra/viewer_components/updater/CMakeLists.txt @@ -59,6 +59,15 @@ if(LL_TESTS)        llupdaterservice.cpp        ) +# *NOTE:Mani - I was trying to use the preprocessor seam to mock out +#              llifstream (and other) llcommon classes. I didn't work +#              because of the windows declspec(dllimport)attribute. +#set_source_files_properties( +#    llupdaterservice.cpp +#    PROPERTIES +#      LL_TEST_ADDITIONAL_CFLAGS "-Dllifstream=llus_mock_llifstream" +#    ) +    LL_ADD_PROJECT_UNIT_TESTS(llupdaterservice "${llupdater_service_TEST_SOURCE_FILES}")  endif(LL_TESTS) diff --git a/indra/viewer_components/updater/llupdatedownloader.h b/indra/viewer_components/updater/llupdatedownloader.h index 491a638f9a..1b3d7480fd 100644 --- a/indra/viewer_components/updater/llupdatedownloader.h +++ b/indra/viewer_components/updater/llupdatedownloader.h @@ -72,6 +72,11 @@ class LLUpdateDownloader::Client {  public:  	// The download has completed successfully. +	// data is a map containing the following items: +	// url - source (remote) location +	// hash - the md5 sum that should match the installer file. +	// path - destination (local) location +	// size - the size of the installer in bytes  	virtual void downloadComplete(LLSD const & data) = 0;  	// The download failed. diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index dc48606cbc..4eb317e668 100644 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -31,18 +31,30 @@  #include "llupdaterservice.h"  #include "llupdatechecker.h" -#include "llpluginprocessparent.h"  #include <boost/scoped_ptr.hpp>  #include <boost/weak_ptr.hpp> +#include "lldir.h" +#include "llsdserialize.h" +#include "llfile.h"  #if LL_WINDOWS  #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally  #endif -boost::weak_ptr<LLUpdaterServiceImpl> gUpdater; + +namespace  +{ +	boost::weak_ptr<LLUpdaterServiceImpl> gUpdater; + +	const std::string UPDATE_MARKER_FILENAME("SecondLifeUpdateReady.xml"); +	std::string update_marker_path() +	{ +		return gDirUtilp->getExpandedFilename(LL_PATH_LOGS,  +											  UPDATE_MARKER_FILENAME); +	} +}  class LLUpdaterServiceImpl :  -	public LLPluginProcessParentOwner,  	public LLUpdateChecker::Client,  	public LLUpdateDownloader::Client  { @@ -56,13 +68,12 @@ class LLUpdaterServiceImpl :  	unsigned int mCheckPeriod;  	bool mIsChecking; -	boost::scoped_ptr<LLPluginProcessParent> mPlugin;  	LLUpdateChecker mUpdateChecker;  	LLUpdateDownloader mUpdateDownloader;  	LLTimer mTimer; -	void retry(void); +	LLUpdaterService::app_exit_callback_t mAppExitCallback;  	LOG_CLASS(LLUpdaterServiceImpl); @@ -70,13 +81,7 @@ public:  	LLUpdaterServiceImpl();  	virtual ~LLUpdaterServiceImpl(); -	// LLPluginProcessParentOwner interfaces -	virtual void receivePluginMessage(const LLPluginMessage &message); -	virtual bool receivePluginMessageEarly(const LLPluginMessage &message); -	virtual void pluginLaunchFailed(); -	virtual void pluginDied(); - -	void setParams(const std::string& protocol_version, +	void initialize(const std::string& protocol_version,  				   const std::string& url,   				   const std::string& path,  				   const std::string& channel, @@ -88,6 +93,11 @@ public:  	void stopChecking();  	bool isChecking(); +	void setAppExitCallback(LLUpdaterService::app_exit_callback_t aecb) { mAppExitCallback = aecb;} + +	bool checkForInstall(); // Test if a local install is ready. +	bool checkForResume(); // Test for resumeable d/l. +  	// LLUpdateChecker::Client:  	virtual void error(std::string const & message);  	virtual void optionalUpdate(std::string const & newVersion, @@ -99,10 +109,14 @@ public:  	virtual void upToDate(void);  	// LLUpdateDownloader::Client -	void downloadComplete(LLSD const & data) { retry(); } -	void downloadError(std::string const & message) { retry(); }	 +	void downloadComplete(LLSD const & data); +	void downloadError(std::string const & message);  	bool onMainLoop(LLSD const & event);	 + +private: +	void retry(void); +  };  const std::string LLUpdaterServiceImpl::sListenerName = "LLUpdaterServiceImpl"; @@ -110,12 +124,9 @@ const std::string LLUpdaterServiceImpl::sListenerName = "LLUpdaterServiceImpl";  LLUpdaterServiceImpl::LLUpdaterServiceImpl() :  	mIsChecking(false),  	mCheckPeriod(0), -	mPlugin(0),  	mUpdateChecker(*this),  	mUpdateDownloader(*this)  { -	// Create the plugin parent, this is the owner. -	mPlugin.reset(new LLPluginProcessParent(this));  }  LLUpdaterServiceImpl::~LLUpdaterServiceImpl() @@ -124,26 +135,8 @@ LLUpdaterServiceImpl::~LLUpdaterServiceImpl()  	LLEventPumps::instance().obtain("mainloop").stopListening(sListenerName);  } -// LLPluginProcessParentOwner interfaces -void LLUpdaterServiceImpl::receivePluginMessage(const LLPluginMessage &message) -{ -} - -bool LLUpdaterServiceImpl::receivePluginMessageEarly(const LLPluginMessage &message)  -{ -	return false; -}; - -void LLUpdaterServiceImpl::pluginLaunchFailed()  -{ -}; - -void LLUpdaterServiceImpl::pluginDied()  -{ -}; - -void LLUpdaterServiceImpl::setParams(const std::string& protocol_version, -									 const std::string& url,  +void LLUpdaterServiceImpl::initialize(const std::string& protocol_version, +									  const std::string& url,   									 const std::string& path,  									 const std::string& channel,  									 const std::string& version) @@ -159,6 +152,12 @@ void LLUpdaterServiceImpl::setParams(const std::string& protocol_version,  	mPath = path;  	mChannel = channel;  	mVersion = version; + +	// Check to see if an install is ready. +	if(!checkForInstall()) +	{ +		checkForResume(); +	}	  }  void LLUpdaterServiceImpl::setCheckPeriod(unsigned int seconds) @@ -176,7 +175,7 @@ void LLUpdaterServiceImpl::startChecking()  				"LLUpdaterService::startCheck().");  		}  		mIsChecking = true; -		 +	  		mUpdateChecker.check(mProtocolVersion, mUrl, mPath, mChannel, mVersion);  	}  } @@ -194,6 +193,45 @@ bool LLUpdaterServiceImpl::isChecking()  	return mIsChecking;  } +bool LLUpdaterServiceImpl::checkForInstall() +{ +	bool result = false; // return true if install is found. + +	llifstream update_marker(update_marker_path(),  +							 std::ios::in | std::ios::binary); + +	if(update_marker.is_open()) +	{ +		// Found an update info - now lets see if its valid. +		LLSD update_info; +		LLSDSerialize::fromXMLDocument(update_info, update_marker); + +		// Get the path to the installer file. +		LLSD path = update_info.get("path"); +		if(path.isDefined() && !path.asString().empty()) +		{ +			// install! +		} + +		update_marker.close(); +		LLFile::remove(update_marker_path()); +		result = true; +	} +	return result; +} + +bool LLUpdaterServiceImpl::checkForResume() +{ +	bool result = false; +	llstat stat_info; +	if(0 == LLFile::stat(mUpdateDownloader.downloadMarkerPath(), &stat_info)) +	{ +		mUpdateDownloader.resume(); +		result = true; +	} +	return false; +} +  void LLUpdaterServiceImpl::error(std::string const & message)  {  	retry(); @@ -218,6 +256,24 @@ void LLUpdaterServiceImpl::upToDate(void)  	retry();  } +void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)  +{  +	// Save out the download data to the SecondLifeUpdateReady +	// marker file. +	llofstream update_marker(update_marker_path()); +	LLSDSerialize::toPrettyXML(data, update_marker); + +	// Stop checking. +	stopChecking(); + +	// Wait for restart...? +} + +void LLUpdaterServiceImpl::downloadError(std::string const & message)  +{  +	retry();  +} +  void LLUpdaterServiceImpl::retry(void)  {  	LL_INFOS("UpdaterService") << "will check for update again in " <<  @@ -263,13 +319,13 @@ LLUpdaterService::~LLUpdaterService()  {  } -void LLUpdaterService::setParams(const std::string& protocol_version, +void LLUpdaterService::initialize(const std::string& protocol_version,  								 const std::string& url,   								 const std::string& path,  								 const std::string& channel,  								 const std::string& version)  { -	mImpl->setParams(protocol_version, url, path, channel, version); +	mImpl->initialize(protocol_version, url, path, channel, version);  }  void LLUpdaterService::setCheckPeriod(unsigned int seconds) @@ -291,3 +347,8 @@ bool LLUpdaterService::isChecking()  {  	return mImpl->isChecking();  } + +void LLUpdaterService::setImplAppExitCallback(LLUpdaterService::app_exit_callback_t aecb) +{ +	return mImpl->setAppExitCallback(aecb); +} diff --git a/indra/viewer_components/updater/llupdaterservice.h b/indra/viewer_components/updater/llupdaterservice.h index 04adf461b6..42ec3a2cab 100644 --- a/indra/viewer_components/updater/llupdaterservice.h +++ b/indra/viewer_components/updater/llupdaterservice.h @@ -27,6 +27,7 @@  #define LL_UPDATERSERVICE_H  #include <boost/shared_ptr.hpp> +#include <boost/function.hpp>  class LLUpdaterServiceImpl; @@ -42,11 +43,11 @@ public:  	LLUpdaterService();  	~LLUpdaterService(); -	void setParams(const std::string& protocol_version, -				   const std::string& url,  -				   const std::string& path, -				   const std::string& channel, -				   const std::string& version); +	void initialize(const std::string& protocol_version, +				    const std::string& url,  +				    const std::string& path, +				    const std::string& channel, +				    const std::string& version);  	void setCheckPeriod(unsigned int seconds); @@ -54,8 +55,17 @@ public:  	void stopChecking();  	bool isChecking(); +	typedef boost::function<void (void)> app_exit_callback_t; +	template <typename F> +	void setAppExitCallback(F const &callable)  +	{  +		app_exit_callback_t aecb = callable; +		setImplAppExitCallback(aecb); +	} +  private:  	boost::shared_ptr<LLUpdaterServiceImpl> mImpl; +	void setImplAppExitCallback(app_exit_callback_t aecb);  };  #endif // LL_UPDATERSERVICE_H diff --git a/indra/viewer_components/updater/scripts/darwin/update_install b/indra/viewer_components/updater/scripts/darwin/update_install index 24d344ca52..24d344ca52 100755..100644 --- a/indra/viewer_components/updater/scripts/darwin/update_install +++ b/indra/viewer_components/updater/scripts/darwin/update_install diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp index 20d0f8fa09..57732ad0a5 100644 --- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp +++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp @@ -36,28 +36,11 @@  #include "../../../test/debug.h"
  #include "llevents.h"
 -#include "llpluginprocessparent.h"
 +#include "lldir.h"
  /*****************************************************************************
  *   MOCK'd
  *****************************************************************************/
 -LLPluginProcessParentOwner::~LLPluginProcessParentOwner() {}
 -LLPluginProcessParent::LLPluginProcessParent(LLPluginProcessParentOwner *owner)
 -: mOwner(owner),
 -  mIncomingQueueMutex(gAPRPoolp)
 -{
 -}
 -
 -LLPluginProcessParent::~LLPluginProcessParent() {}
 -LLPluginMessagePipeOwner::LLPluginMessagePipeOwner(){}
 -LLPluginMessagePipeOwner::~LLPluginMessagePipeOwner(){}
 -void LLPluginProcessParent::receiveMessageRaw(const std::string &message) {}
 -int LLPluginMessagePipeOwner::socketError(int) { return 0; }
 -void LLPluginProcessParent::setMessagePipe(LLPluginMessagePipe *message_pipe) {}
 -void LLPluginMessagePipeOwner::setMessagePipe(class LLPluginMessagePipe *) {}
 -LLPluginMessage::~LLPluginMessage() {}
 -LLPluginMessage::LLPluginMessage(LLPluginMessage const&) {}
 -
  LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client)
  {}
  void LLUpdateChecker::check(std::string const & protocolVersion, std::string const & hostUrl, 
 @@ -66,6 +49,70 @@ void LLUpdateChecker::check(std::string const & protocolVersion, std::string con  LLUpdateDownloader::LLUpdateDownloader(Client & ) {}
  void LLUpdateDownloader::download(LLURI const & , std::string const &){}
 +class LLDir_Mock : public LLDir
 +{
 +	void initAppDirs(const std::string &app_name, 
 +		   			 const std::string& app_read_only_data_dir = "") {}
 +	U32 countFilesInDir(const std::string &dirname, const std::string &mask) 
 +	{
 +		return 0;
 +	}
 +
 +	BOOL getNextFileInDir(const std::string &dirname, 
 +						  const std::string &mask, 
 +						  std::string &fname, BOOL wrap) 
 +	{
 +		return false;
 +	}
 +	void getRandomFileInDir(const std::string &dirname, 
 +							const std::string &mask, 
 +							std::string &fname) {}
 +	std::string getCurPath() { return ""; }
 +	BOOL fileExists(const std::string &filename) const { return false; }
 +	std::string getLLPluginLauncher() { return ""; }
 +	std::string getLLPluginFilename(std::string base_name) { return ""; }
 +
 +} gDirUtil;
 +LLDir* gDirUtilp = &gDirUtil;
 +LLDir::LLDir() {}
 +LLDir::~LLDir() {}
 +S32 LLDir::deleteFilesInDir(const std::string &dirname, 
 +							const std::string &mask)
 +{ return 0; }
 +
 +void LLDir::setChatLogsDir(const std::string &path){}		
 +void LLDir::setPerAccountChatLogsDir(const std::string &username){}
 +void LLDir::setLindenUserDir(const std::string &username){}		
 +void LLDir::setSkinFolder(const std::string &skin_folder){}
 +bool LLDir::setCacheDir(const std::string &path){ return true; }
 +void LLDir::dumpCurrentDirectories() {}
 +
 +std::string LLDir::getExpandedFilename(ELLPath location, 
 +									   const std::string &filename) const 
 +{
 +	return "";
 +}
 +
 +std::string LLUpdateDownloader::downloadMarkerPath(void)
 +{
 +	return "";
 +}
 +
 +void LLUpdateDownloader::resume(void) {}
 +
 +/*
 +#pragma warning(disable: 4273)
 +llus_mock_llifstream::llus_mock_llifstream(const std::string& _Filename, +										   ios_base::openmode _Mode, +										   int _Prot) : +	std::basic_istream<char,std::char_traits< char > >(NULL,true) +{} + +llus_mock_llifstream::~llus_mock_llifstream() {}
 +bool llus_mock_llifstream::is_open() const {return true;}
 +void llus_mock_llifstream::close() {}
 +*/
 +
  /*****************************************************************************
  *   TUT
  *****************************************************************************/
 @@ -114,9 +161,9 @@ namespace tut  		bool got_usage_error = false;
  		try
  		{
 -			updater.setParams("1.0",test_url, "update" ,test_channel, test_version);
 +			updater.initialize("1.0",test_url, "update" ,test_channel, test_version);
  			updater.startChecking();
 -			updater.setParams("1.0", "other_url", "update", test_channel, test_version);
 +			updater.initialize("1.0", "other_url", "update", test_channel, test_version);
  		}
  		catch(LLUpdaterService::UsageError)
  		{
 @@ -130,7 +177,7 @@ namespace tut      {
          DEBUG;
  		LLUpdaterService updater;
 -		updater.setParams("1.0", test_url, "update", test_channel, test_version);
 +		updater.initialize("1.0", test_url, "update", test_channel, test_version);
  		updater.startChecking();
  		ensure(updater.isChecking());
  		updater.stopChecking();
 | 
