#!/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.
#

import os
import sys

# Put the python test library on the path so we can get our
# environment

file_path = os.path.abspath(__file__)
store_tests_dir = os.path.split(file_path)[0]
tests_dir = os.path.split(store_tests_dir)[0]

sys.path.insert(0, tests_dir)

from common import *

# Add our directory to the python path

ENV["PYTHONPATH"] = "{0}:{1}".format(store_tests_dir, ENV["PYTHONPATH"])

# To debug a test, add the following options to the end of the following line:
# -v DEBUG -c qpid.messaging.io.ops [*.testName]

port = start_broker("broker", "--load-module {0}".format(STORE_LIB))

run_broker_tests(port, "-m python_tests", "-DOUTDIR={0}".format(WORK_DIR))

check_results()
