#!/usr/bin/env python

#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

from common import *

# Options for boost test framework

if "BOOST_TEST_SHOW_PROGRESS" not in ENV:
    ENV["BOOST_TEST_SHOW_PROGRESS"] = "yes"

if "BOOST_TEST_CATCH_SYSTEM_ERRORS" not in ENV:
    ENV["BOOST_TEST_CATCH_SYSTEM_ERRORS"] = "no"

if WINDOWS:
    ENV["QPID_SSL_CERT_STORE_LOCATION"] = "LocalMachine"
    ENV["QPID_SSL_CERT_NAME"] = "localhost"
    ENV["QPID_SSL_PORT"] = "0"
    
call_with_valgrind("unit_test")

check_results()
