Skip to content

Commit b55e069

Browse files
committed
[FAB-3633]: Setup and Teardown environment
This allows for the setup and teardown of behave tests at the beginning of the scenario runs. Change-Id: I78cde421157a85dedfc542a75722b4784a3f7915 Signed-off-by: Latitia M Haskins <[email protected]>
1 parent 2f55f4a commit b55e069

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

test/feature/environment.py

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Copyright IBM Corp. 2017 All Rights Reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
#
15+
16+
import subprocess
17+
import shutil
18+
19+
20+
def getDockerComposeFileArgsFromYamlFile(composeYaml):
21+
parts = composeYaml.split()
22+
args = []
23+
for part in parts:
24+
args = args + ["-f"] + [part]
25+
return args
26+
27+
28+
def getLogFiles(containers, fileSuffix):
29+
""" This will gather the logs for the different component containers as well as
30+
the chaincode containers. If the containers is a list of strings, it is
31+
assumed this is a chaincode container list. Otherwise, the list is a list
32+
of Container objects.
33+
"""
34+
for container in containers:
35+
if isinstance(container, str):
36+
namePart, sep, _ = container.rpartition("-")
37+
containerName = container
38+
else:
39+
namePart = container.containerName
40+
containerName = container.containerName
41+
with open(namePart + fileSuffix, "w+") as logfile:
42+
rc = subprocess.call(["docker", "logs", containerName], stdout=logfile, stderr=logfile)
43+
if rc !=0 :
44+
print("Cannot get logs for {0}. Docker rc = {1}".format(namePart, rc))
45+
46+
47+
def after_scenario(context, scenario):
48+
getLogs = context.config.userdata.get("logs", "N")
49+
if getLogs.lower() == "force" or (scenario.status == "failed" and getLogs.lower() == "y" and "compose_containers" in context):
50+
print("Scenario {0} failed. Getting container logs".format(scenario.name))
51+
fileSuffix = "_" + scenario.name.replace(" ", "_") + ".log"
52+
# get logs from the peer containers
53+
getLogFiles(containers, fileSuffix)
54+
# get logs from the chaincode containers
55+
chaincodeContainers = subprocess.call(["docker", "ps", "-f", "name=dev-", "--format", "{{.Names}}"])
56+
getLogFiles(chaincodeContainers.splitlines(), fileSuffix)
57+
58+
if 'doNotDecompose' in scenario.tags:
59+
if 'compose_yaml' in context:
60+
print("Not going to decompose after scenario {0}, with yaml '{1}'".format(scenario.name, context.compose_yaml))
61+
elif 'composition' in context:
62+
# Remove config data and docker containers
63+
shutil.rmtree("configs/%s" % context.composition.projectName)
64+
context.composition.decompose()
65+
66+
# stop any running peer that could get in the way before starting the tests
67+
def before_all(context):
68+
pass
69+
70+
# stop any running peer that could get in the way before starting the tests
71+
def after_all(context):
72+
print("context.failed = {0}".format(context.failed))

0 commit comments

Comments
 (0)