#!/usr/bin/env python
#
# check.py :  Run all the test cases.
#
# ===================================================================
#   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 sys
import glob
import subprocess
import os


if __name__ == '__main__':
  # get the test directory from the commandline, if set.
  if len(sys.argv) > 1:
    testdir = sys.argv[1]
  else:
    testdir = 'test'

  if len(sys.argv) > 2:
    test_builddir = sys.argv[2]
  else:
    test_builddir = 'test'

  # define test executable paths
  if sys.platform == 'win32':
    SERF_RESPONSE_EXE = 'serf_response.exe'
    TEST_ALL_EXE = 'test_all.exe'
  else:
    SERF_RESPONSE_EXE = 'serf_response'
    TEST_ALL_EXE = 'test_all'
  SERF_RESPONSE_EXE = os.path.join(test_builddir, SERF_RESPONSE_EXE)
  TEST_ALL_EXE = os.path.join(test_builddir, TEST_ALL_EXE)

  # Find test responses and run them one by one
  for case in glob.glob(testdir + "/testcases/*.response"):
    print("== Testing %s ==" % (case))
    try:
      subprocess.check_call([SERF_RESPONSE_EXE, case])
    except subprocess.CalledProcessError as x:
      print("ERROR: test failed in '%s', exit code=%d" % (x.cmd, x.returncode))
      sys.exit(1)

  print("== Running the unit tests ==")
  try:
    subprocess.check_call(TEST_ALL_EXE)
  except subprocess.CalledProcessError as x:
    print("ERROR: test(s) failed in '%s', exit code=%d" % (x.cmd, x.returncode))
    sys.exit(1)
