components/rabbitmq/test.py
author John Beck <John.Beck@Oracle.COM>
Tue, 10 Feb 2015 14:10:51 -0800
changeset 3770 ca450a806cc1
parent 1751 2c57b522c401
permissions -rw-r--r--
20440888 Userland python tools should migrate to 2.7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3770
ca450a806cc1 20440888 Userland python tools should migrate to 2.7
John Beck <John.Beck@Oracle.COM>
parents: 1751
diff changeset
     1
#!/usr/bin/python2.7
1751
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     2
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     3
# CDDL HEADER START
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     4
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     5
# The contents of this file are subject to the terms of the
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     6
# Common Development and Distribution License (the "License").
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     7
# You may not use this file except in compliance with the License.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     8
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     9
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    10
# or http://www.opensolaris.org/os/licensing.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    11
# See the License for the specific language governing permissions
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    12
# and limitations under the License.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    13
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    14
# When distributing Covered Code, include this CDDL HEADER in each
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    15
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    16
# If applicable, add the following below this CDDL HEADER, with the
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    17
# fields enclosed by brackets "[]" replaced with your own identifying
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    18
# information: Portions Copyright [yyyy] [name of copyright owner]
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    19
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    20
# CDDL HEADER END
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    21
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    22
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    23
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    24
# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    25
#
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    26
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    27
import errno
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    28
import os
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    29
import socket
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    30
import subprocess
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    31
import sys
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    32
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    33
target = sys.argv[1]
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    34
tdir = os.path.dirname(target)
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    35
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    36
os.chdir(tdir)
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    37
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    38
def find_free_port(base=1024, tries=10):
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    39
    s = socket.socket()
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    40
    for port in xrange(base, base + tries):
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    41
        try:
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    42
            s.bind(("", port))
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    43
        except socket.error, e:
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    44
            if e.errno != errno.EADDRINUSE:
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    45
                raise
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    46
            continue
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    47
        else:
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    48
            s.close()
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    49
        return port
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    50
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    51
# We want to isolate both the rabbit server and the epmd it might spawn, in case
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    52
# either one is already running on the machine (on ports 5672 and 4639,
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    53
# respectively).  We do so by specifying the ports they use, and we find a
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    54
# couple of free ports here.  This is obviously inherently racy, but it should
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    55
# be good enough.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    56
epmd_port = find_free_port(4455)
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    57
rabbit_port = find_free_port(5677)
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    58
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    59
gmake = os.environ.get("GMAKE", "/usr/gnu/bin/make")
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    60
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    61
# Start up the rabbit server.  In order to use rabbit's makefile targets, we
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    62
# have to start it in two steps -- first the main server, then the core rabbit
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    63
# routines.  We put all the temporary directories in the build directory, and we
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    64
# have to set SCRIPT_DIR because of the way the scripts resolve symlinks when
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    65
# they find each other.  We also set PLUGINS_SRC_DIR to an empty value so that
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    66
# the rabbit makefile infrastructure doesn't try to rebuild .ez files or recopy
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    67
# them to the plugins dir.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    68
ret = subprocess.call([gmake, "start-background-node", "start-rabbit-on-node",
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    69
    "ERL_EPMD_PORT=%d" % epmd_port, "RABBITMQ_NODE_PORT=%d" % rabbit_port,
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    70
    "SCRIPT_DIR=%s/scripts" % tdir, "RABBITMQ_LOG_BASE=%s/t" % tdir,
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    71
    "PLUGINS_SRC_DIR=", "RABBITMQ_MNESIA_DIR=%s/t/rabbit-mnesia" % tdir,
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    72
    "RABBITMQ_PLUGINS_EXPAND_DIR=%s/t/rabbit-plugins-scratch" % tdir])
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    73
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    74
if ret > 0:
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    75
    sys.exit(ret)
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    76
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    77
test_ret = subprocess.call([gmake, "run-tests", "PLUGINS_SRC_DIR=",
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    78
    "ERL_EPMD_PORT=%d" % epmd_port, "RABBITMQ_NODE_PORT=%d" % rabbit_port])
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    79
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    80
stopnode_ret = subprocess.call([gmake, "stop-node", "PLUGINS_SRC_DIR=",
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    81
    "ERL_EPMD_PORT=%d" % epmd_port, "RABBITMQ_NODE_PORT=%d" % rabbit_port])
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    82
stopepmd_ret = subprocess.call(["/usr/bin/epmd", "-kill"],
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    83
    env={"ERL_EPMD_PORT": str(epmd_port)})
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    84
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    85
# Return with the first non-zero exit code of the three previous commands.
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    86
ret = next((r for r in (test_ret, stopnode_ret, stopepmd_ret) if r > 0), 0)
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    87
2c57b522c401 18367677 rabbit's test target isn't hooked up
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    88
sys.exit(ret)