mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
fe2ff122dc
Summary: Created a containerized environment to run unit and integration tests for both javascript and android as well as a Jenkinsfile using the new 2.0 Pipeline syntax for integration into a Jenkins CI cluster. Here is a quick summary of the changes: * The android image is built from two separate dockerfiles. There is a base image that handles the heavy lifting of dependencies that are infrequently changed while the secondary image extends the base and allows for much quicker incremental builds on code updates. * The javascript image is simple and is relatively quick to build, therefore there is no base image for any react specific javascript dependencies and it is all packaged in a single docker image. * A new `scripts/docker` has been created including some javascript files and shell scripts to aid in the running of the tests * The instrumentation test runner script can be passed various flags to control which tests run since the entire suite takes a significant amount of time to run synchronously * Jen Closes https://github.com/facebook/react-native/pull/11902 Differential Revision: D4609238 Pulled By: ericvicenti fbshipit-source-id: a317f3ac3be898180b009254a9604ca7d579a8b9
66 lines
1.6 KiB
Bash
Executable File
66 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Python script to run instrumentation tests, copied from https://github.com/circleci/circle-dummy-android
|
|
# Example: ./scripts/run-android-instrumentation-tests.sh com.facebook.react.tests com.facebook.react.tests.ReactPickerTestCase
|
|
#
|
|
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH"
|
|
|
|
# clear the logs
|
|
adb logcat -c
|
|
|
|
# run tests and check output
|
|
python - $1 $2 << END
|
|
|
|
import re
|
|
import subprocess as sp
|
|
import sys
|
|
import threading
|
|
import time
|
|
|
|
done = False
|
|
|
|
test_app = sys.argv[1]
|
|
test_class = None
|
|
|
|
if len(sys.argv) > 2:
|
|
test_class = sys.argv[2]
|
|
|
|
def update():
|
|
# prevent CircleCI from killing the process for inactivity
|
|
while not done:
|
|
time.sleep(5)
|
|
print "Running in background. Waiting for 'adb' command reponse..."
|
|
|
|
t = threading.Thread(target=update)
|
|
t.dameon = True
|
|
t.start()
|
|
|
|
def run():
|
|
sp.Popen(['adb', 'wait-for-device']).communicate()
|
|
if (test_class != None):
|
|
p = sp.Popen('adb shell am instrument -w -e class %s %s/android.support.test.runner.AndroidJUnitRunner'
|
|
% (test_class, test_app), shell=True, stdout=sp.PIPE, stderr=sp.PIPE, stdin=sp.PIPE)
|
|
else :
|
|
p = sp.Popen('adb shell am instrument -w %s/android.support.test.runner.AndroidJUnitRunner'
|
|
% (test_app), shell=True, stdout=sp.PIPE, stderr=sp.PIPE, stdin=sp.PIPE)
|
|
return p.communicate()
|
|
|
|
success = re.compile(r'OK \(\d+ test(s)?\)')
|
|
stdout, stderr = run()
|
|
|
|
done = True
|
|
print stderr
|
|
print stdout
|
|
|
|
if success.search(stderr + stdout):
|
|
sys.exit(0)
|
|
else:
|
|
# dump the logs
|
|
sp.Popen(['adb', 'logcat', '-d']).communicate()
|
|
sys.exit(1) # make sure we fail if the test failed
|
|
END
|
|
|
|
RETVAL=$?
|
|
|
|
exit $RETVAL
|