From 05f6a1eabf4b57cc4c33322f4a7d15915a787b6e Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 07:39:16 -0700 Subject: [PATCH 01/14] Splitting into pre and post proguard tests --- test-apps/README.md | 2 +- test-apps/build.gradle | 5 +++-- test-apps/database-test-app/build.gradle | 5 +++-- test-apps/firestore-test-app/build.gradle | 2 +- test-apps/functions-test-app/build.gradle | 3 +-- test-apps/storage-test-app/build.gradle | 2 +- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/test-apps/README.md b/test-apps/README.md index 2a2107abf4d..abb8a972244 100644 --- a/test-apps/README.md +++ b/test-apps/README.md @@ -29,5 +29,5 @@ This experimental directory contains apps that are used to smoke test Firebase A - From the /test-apps dir, run the tests ``` - ./gradlew connectedReleaseAndroidTest -PfirebaseProjectId= -PfirebaseToken= -Pm2Repository=${PWD}/../build/m2repository/ + ./gradlew connectedCheck -PtestBuildType= -PfirebaseProjectId= -PfirebaseToken= -Pm2Repository=${PWD}/../build/m2repository/ ``` diff --git a/test-apps/build.gradle b/test-apps/build.gradle index 10dc3ec2cd4..0d3f482f926 100644 --- a/test-apps/build.gradle +++ b/test-apps/build.gradle @@ -19,7 +19,6 @@ buildscript { jcenter() mavenLocal() google() - maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:3.1.4' @@ -33,6 +32,8 @@ plugins { } allprojects { + ext.testBuildType = project.getProperties().get("testBuildType", "debug") + apply plugin: 'com.github.sherter.google-java-format' googleJavaFormat { toolVersion = '1.6' @@ -108,7 +109,7 @@ allprojects { } } tasks.whenTaskAdded { - if ( it.name == 'connectedReleaseAndroidTest') { + if ( it.name == 'connectedCheck') { it.dependsOn setupSmokeTest it.dependsOn rootProject.tasks.findByName("dependencyUpdates") } diff --git a/test-apps/database-test-app/build.gradle b/test-apps/database-test-app/build.gradle index d967028b3dd..2182b92ea15 100644 --- a/test-apps/database-test-app/build.gradle +++ b/test-apps/database-test-app/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'com.android.application' android { - testBuildType "release" + testBuildType = project.testBuildType compileSdkVersion 27 defaultConfig { @@ -53,7 +53,8 @@ configurations.all { dependencies { // We intentionally use an open ended version to pick up any SNAPSHOT // versions published to the root project' s build/ directory. - implementation 'com.google.firebase:firebase-database:+' + implementation 'com.google.firebase:firebase-database:16.0.2' + implementation 'com.google.firebase:firebase-database:16.0.2:javadoc' implementation 'com.google.firebase:firebase-core:16+' implementation 'com.google.firebase:firebase-auth:16+' diff --git a/test-apps/firestore-test-app/build.gradle b/test-apps/firestore-test-app/build.gradle index 722697ffd79..ca5b4df69e9 100644 --- a/test-apps/firestore-test-app/build.gradle +++ b/test-apps/firestore-test-app/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'com.android.application' android { - testBuildType "release" + testBuildType = project.testBuildType compileSdkVersion 27 defaultConfig { diff --git a/test-apps/functions-test-app/build.gradle b/test-apps/functions-test-app/build.gradle index 2144cec7a06..98ad178219c 100644 --- a/test-apps/functions-test-app/build.gradle +++ b/test-apps/functions-test-app/build.gradle @@ -17,8 +17,7 @@ apply plugin: 'com.android.application' android { - // Changes the test build type for instrumented tests to "stage". - testBuildType "release" + testBuildType = project.testBuildType compileSdkVersion 27 defaultConfig { diff --git a/test-apps/storage-test-app/build.gradle b/test-apps/storage-test-app/build.gradle index 91927d81c74..b8df14650fb 100644 --- a/test-apps/storage-test-app/build.gradle +++ b/test-apps/storage-test-app/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'com.android.application' android { - testBuildType "release" + testBuildType = project.testBuildType compileSdkVersion 27 defaultConfig { From 82657088224c8d63c70e0d4830c91ea0f8fa57c1 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 07:44:38 -0700 Subject: [PATCH 02/14] Removing deps --- test-apps/database-test-app/build.gradle | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test-apps/database-test-app/build.gradle b/test-apps/database-test-app/build.gradle index 2182b92ea15..6bd58dbc9f2 100644 --- a/test-apps/database-test-app/build.gradle +++ b/test-apps/database-test-app/build.gradle @@ -53,8 +53,7 @@ configurations.all { dependencies { // We intentionally use an open ended version to pick up any SNAPSHOT // versions published to the root project' s build/ directory. - implementation 'com.google.firebase:firebase-database:16.0.2' - implementation 'com.google.firebase:firebase-database:16.0.2:javadoc' + implementation 'com.google.firebase:firebase-database:+' implementation 'com.google.firebase:firebase-core:16+' implementation 'com.google.firebase:firebase-auth:16+' From c06e757fc99e9b28b06975c747113ffb1327c876 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 09:06:45 -0700 Subject: [PATCH 03/14] Rewiring the connectedCheck --- ci/fireci/fireci/commands.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index 2ca748210e0..d3e600db9ef 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -37,8 +37,9 @@ def smoke_tests_experimental(): cwd = os.getcwd() gradle.run( - 'connectedReleaseAndroidTest', + 'connectedCheck', gradle_opts='-Dmaven.repo.local={}'.format( os.path.join(cwd, 'build', 'm2repository')), workdir=os.path.join(cwd, 'test-apps'), ) + From 27859f006f7ef64a3ee8310550d7b9938af0c479 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 09:39:37 -0700 Subject: [PATCH 04/14] Wiring google services --- test-apps/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test-apps/build.gradle b/test-apps/build.gradle index 25983616d43..5ab73199522 100644 --- a/test-apps/build.gradle +++ b/test-apps/build.gradle @@ -72,6 +72,9 @@ allprojects { if ( it.name == 'processReleaseGoogleServices') { it.dependsOn 'copyRootGoogleServices' } + if ( it.name == 'processReleaseGoogleServices') { + it.dependsOn 'copyRootGoogleServices' + } } if(file('test_setup.sh').exists()) { From f9a266ccc58971f70cbb6e899c6c08f3d3158dd0 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 09:44:53 -0700 Subject: [PATCH 05/14] Fixing ci test --- ci/fireci/tests/integ_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index 34c42fc5bd4..931eb2c6063 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -98,7 +98,7 @@ def test_smoke_test_should_invoke_gradle_with_expected_arguments(self): Artifact( 'test-apps/gradlew', content=scripts.with_expected_arguments( - ['./gradlew', 'connectedReleaseAndroidTest'], { + ['./gradlew', 'connectedCheck'], { 'GRADLE_OPTS': '-Dmaven.repo.local={}'.format( os.path.join(os.getcwd(), 'build', 'm2repository')) From d94d87f2334805f85b735855bbe7a1a77c8c8b95 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 10:25:03 -0700 Subject: [PATCH 06/14] Wiring services.json into debug builds --- test-apps/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-apps/build.gradle b/test-apps/build.gradle index 5ab73199522..f9c83d6033b 100644 --- a/test-apps/build.gradle +++ b/test-apps/build.gradle @@ -72,7 +72,7 @@ allprojects { if ( it.name == 'processReleaseGoogleServices') { it.dependsOn 'copyRootGoogleServices' } - if ( it.name == 'processReleaseGoogleServices') { + if ( it.name == 'processDebugGoogleServices') { it.dependsOn 'copyRootGoogleServices' } } From 3b1f1ec319da3b8226899c45dda2b687da263a92 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Fri, 21 Sep 2018 10:45:40 -0700 Subject: [PATCH 07/14] Running debug and release tests --- ci/fireci/fireci/commands.py | 8 ++++++++ ci/fireci/tests/integ_tests.py | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index d3e600db9ef..7f4e4c2a6cc 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -38,6 +38,14 @@ def smoke_tests_experimental(): cwd = os.getcwd() gradle.run( 'connectedCheck', + '-PtestBuildType=release', + gradle_opts='-Dmaven.repo.local={}'.format( + os.path.join(cwd, 'build', 'm2repository')), + workdir=os.path.join(cwd, 'test-apps'), + ) + gradle.run( + 'connectedCheck', + '-PtestBuildType=debug', gradle_opts='-Dmaven.repo.local={}'.format( os.path.join(cwd, 'build', 'm2repository')), workdir=os.path.join(cwd, 'test-apps'), diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index 931eb2c6063..849725865cf 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -98,7 +98,16 @@ def test_smoke_test_should_invoke_gradle_with_expected_arguments(self): Artifact( 'test-apps/gradlew', content=scripts.with_expected_arguments( - ['./gradlew', 'connectedCheck'], { + ['./gradlew', 'connectedChseck', '-PtestBuildType=debug'], { + 'GRADLE_OPTS': + '-Dmaven.repo.local={}'.format( + os.path.join(os.getcwd(), 'build', 'm2repository')) + }), + mode=0o744), + Artifact( + 'test-apps/gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'connectedChseck', '-PtestBuildType=release'], { 'GRADLE_OPTS': '-Dmaven.repo.local={}'.format( os.path.join(os.getcwd(), 'build', 'm2repository')) From a2b86a9f0ffebbc06d9284025cff7d3151bb20c8 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 06:50:07 -0700 Subject: [PATCH 08/14] Adding no proguard test --- ci/fireci/fireci/commands.py | 48 +++++++----- ci/fireci/tests/integ_tests.py | 136 +++++++++++++++++++++------------ 2 files changed, 114 insertions(+), 70 deletions(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index 7f4e4c2a6cc..ef386508cae 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -26,28 +26,34 @@ help='GRADLE_OPTS passed to the gradle invocation.') @ci_command('gradle') def gradle_command(task, gradle_opts): - """Runs the specified gradle commands.""" - gradle.run(*task, gradle_opts=gradle_opts) + """Runs the specified gradle commands.""" + gradle.run(*task, gradle_opts=gradle_opts) @ci_command() -def smoke_tests_experimental(): - """Builds all SDKs in release mode and then tests test-apps against them.""" - gradle.run('publishAllToBuildDir') - - cwd = os.getcwd() - gradle.run( - 'connectedCheck', - '-PtestBuildType=release', - gradle_opts='-Dmaven.repo.local={}'.format( - os.path.join(cwd, 'build', 'm2repository')), - workdir=os.path.join(cwd, 'test-apps'), - ) - gradle.run( - 'connectedCheck', - '-PtestBuildType=debug', - gradle_opts='-Dmaven.repo.local={}'.format( - os.path.join(cwd, 'build', 'm2repository')), - workdir=os.path.join(cwd, 'test-apps'), - ) +def smoke_tests_proguarded_app(): + """Builds all SDKs in release mode and then tests test-apps against them.""" + gradle.run('publishAllToBuildDir') + + cwd = os.getcwd() + gradle.run( + 'connectedCheck', + '-PtestBuildType=release', + gradle_opts='-Dmaven.repo.local={}'.format( + os.path.join(cwd, 'build', 'm2repository')), + workdir=os.path.join(cwd, 'test-apps'), + ) +@ci_command() +def smoke_tests_unproguarded_app(): + """Builds all SDKs in release mode and then tests test-apps against them.""" + gradle.run('publishAllToBuildDir') + + cwd = os.getcwd() + gradle.run( + 'connectedCheck', + '-PtestBuildType=debug', + gradle_opts='-Dmaven.repo.local={}'.format( + os.path.join(cwd, 'build', 'm2repository')), + workdir=os.path.join(cwd, 'test-apps'), + ) \ No newline at end of file diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index 849725865cf..7d03cd48f57 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -29,66 +29,112 @@ class CliInvocationTests(unittest.TestCase): - runner = CliRunner() + runner = CliRunner() - @in_tempdir - def test_gradle_invocation(self): - args = ['--arg1', 'task1'] - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments_and_artifacts( - ['./gradlew'] + args, - {'GRADLE_OPTS': 'opts'}, - ('sdk1/build/output/file1', 'content1'), - ('sdk1/build/outputss/file2', 'content2'), - ), - mode=0o744)) - result = self.runner.invoke(cli, [ - '--artifact-patterns', '**/build/output', 'gradle', '--gradle-opts', - 'opts', '--' - ] + args) - self.assertEqual(result.exit_code, 0) + @in_tempdir + def test_gradle_invocation(self): + args = ['--arg1', 'task1'] + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments_and_artifacts( + ['./gradlew'] + args, + {'GRADLE_OPTS': 'opts'}, + ('sdk1/build/output/file1', 'content1'), + ('sdk1/build/outputss/file2', 'content2'), + ), + mode=0o744)) + result = self.runner.invoke(cli, [ + '--artifact-patterns', '**/build/output', 'gradle', '--gradle-opts', + 'opts', '--' + ] + args) + self.assertEqual(result.exit_code, 0) + + artifacts = pathlib.Path('_artifacts') + self.assertTrue(artifacts.exists()) - artifacts = pathlib.Path('_artifacts') - self.assertTrue(artifacts.exists()) + output_file = artifacts / 'sdk1_build_outputss' / 'file2' + self.assertFalse(output_file.exists()) - output_file = artifacts / 'sdk1_build_outputss' / 'file2' - self.assertFalse(output_file.exists()) + output_file = artifacts / 'sdk1_build_output' / 'file1' + self.assertTrue(output_file.is_file()) - output_file = artifacts / 'sdk1_build_output' / 'file1' - self.assertTrue(output_file.is_file()) + with output_file.open() as f: + self.assertEqual(f.read(), 'content1') - with output_file.open() as f: - self.assertEqual(f.read(), 'content1') + @in_tempdir + def test_smoke_test_proguarded_app_when_build_fails_should_fail(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) + result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + self.assertNotEqual(result.exit_code, 0) - @in_tempdir - def test_smoke_test_when_build_fails_should_fail(self): + @in_tempdir + def test_smoke_test_proguarded_app_when_build_succeeds_and_tests_fails_should_fail(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), + Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + self.assertNotEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_proguarded_app_when_build_succeeds_and_tests_succeed_should_succeed(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), + Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + self.assertEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_proguarded_app_should_invoke_gradle_with_expected_arguments(self): + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'publishAllToBuildDir']), + mode=0o744), + Artifact( + 'test-apps/gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'connectedCheck', '-PtestBuildType=release'], { + 'GRADLE_OPTS': + '-Dmaven.repo.local={}'.format( + os.path.join(os.getcwd(), 'build', 'm2repository')) + }), + mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + self.assertEqual(result.exit_code, 0) + +@in_tempdir +def test_smoke_test_unproguarded_app_when_build_fails_should_fail(self): create_artifacts( Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) - result = self.runner.invoke(cli, ['smoke_tests_experimental']) + result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) self.assertNotEqual(result.exit_code, 0) - @in_tempdir - def test_smoke_test_when_build_succeeds_and_tests_fails_should_fail(self): +@in_tempdir +def test_smoke_test_unproguarded_app_when_build_succeeds_and_tests_fails_should_fail(self): create_artifacts( Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_experimental']) + result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) self.assertNotEqual(result.exit_code, 0) - @in_tempdir - def test_smoke_test_when_build_succeeds_and_tests_succeed_should_succeed(self): +@in_tempdir +def test_smoke_test_unproguarded_app_when_build_succeeds_and_tests_succeed_should_succeed(self): create_artifacts( Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_experimental']) + result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) self.assertEqual(result.exit_code, 0) - @in_tempdir - def test_smoke_test_should_invoke_gradle_with_expected_arguments(self): +@in_tempdir +def test_smoke_test_unproguarded_app_should_invoke_gradle_with_expected_arguments(self): create_artifacts( Artifact( 'gradlew', @@ -98,21 +144,13 @@ def test_smoke_test_should_invoke_gradle_with_expected_arguments(self): Artifact( 'test-apps/gradlew', content=scripts.with_expected_arguments( - ['./gradlew', 'connectedChseck', '-PtestBuildType=debug'], { - 'GRADLE_OPTS': - '-Dmaven.repo.local={}'.format( - os.path.join(os.getcwd(), 'build', 'm2repository')) - }), - mode=0o744), - Artifact( - 'test-apps/gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'connectedChseck', '-PtestBuildType=release'], { + ['./gradlew', 'connectedCheck', '-PtestBuildType=debug'], { 'GRADLE_OPTS': '-Dmaven.repo.local={}'.format( os.path.join(os.getcwd(), 'build', 'm2repository')) }), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_experimental']) + result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) self.assertEqual(result.exit_code, 0) + From d06aa42a983201e402026c1985764e3cf7ea56a6 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 07:57:35 -0700 Subject: [PATCH 09/14] Fixed test --- ci/fireci/tests/integ_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index 4a9f1f42559..ff9830f0989 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -151,6 +151,6 @@ def test_smoke_test_unproguarded_app_should_invoke_gradle_with_expected_argument }), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) self.assertEqual(result.exit_code, 0) From 1665f992775ea90e9b1f710e2a1d3de25e14a9aa Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 09:34:22 -0700 Subject: [PATCH 10/14] Review feedback --- ci/fireci/fireci/commands.py | 27 ++++++-------------- ci/fireci/tests/integ_tests.py | 46 ++++++++-------------------------- 2 files changed, 18 insertions(+), 55 deletions(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index 26e629c477d..7d779eb1864 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -29,31 +29,20 @@ def gradle_command(task, gradle_opts): """Runs the specified gradle commands.""" gradle.run(*task, gradle_opts=gradle_opts) - -@ci_command() -def smoke_tests_proguarded_app(): - """Builds all SDKs in release mode and then tests test-apps against them.""" - gradle.run('publishAllToBuildDir') - - cwd = os.getcwd() - gradle.run( - 'connectedCheck', - '-PtestBuildType=release', - gradle_opts='-Dmaven.repo.local={}'.format( - os.path.join(cwd, 'build', 'm2repository')), - workdir=os.path.join(cwd, 'test-apps'), - ) - +@click.option( + '--appBuildVariant', + type=click.Choice(['debug', 'release']), + default='release', + help='App build variant to use while running the smoke Tests. One of release|debug') @ci_command() -def smoke_tests_unproguarded_app(): +def smoke_tests(appBuildVariant): """Builds all SDKs in release mode and then tests test-apps against them.""" gradle.run('publishAllToBuildDir') cwd = os.getcwd() gradle.run( 'connectedCheck', - '-PtestBuildType=debug', - gradle_opts='-Dmaven.repo.local={}'.format( - os.path.join(cwd, 'build', 'm2repository')), + '-PtestBuildType=%s' % (appBuildVariant), + gradle_opts='-Dmaven.repo.local={}'.format(os.path.join(cwd, 'build', 'm2repository')), workdir=os.path.join(cwd, 'test-apps'), ) \ No newline at end of file diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index ff9830f0989..6136efd297d 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -63,32 +63,32 @@ def test_gradle_invocation(self): self.assertEqual(f.read(), 'content1') @in_tempdir - def test_smoke_test_proguarded_app_when_build_fails_should_fail(self): + def test_smoke_test_when_build_fails_should_fail(self): create_artifacts( Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) - result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + result = self.runner.invoke(cli, ['smoke_tests']) self.assertNotEqual(result.exit_code, 0) @in_tempdir - def test_smoke_test_proguarded_app_when_build_succeeds_and_tests_fails_should_fail(self): + def test_smoke_test_when_build_succeeds_and_tests_fails_should_fail(self): create_artifacts( Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + result = self.runner.invoke(cli, ['smoke_tests']) self.assertNotEqual(result.exit_code, 0) @in_tempdir - def test_smoke_test_proguarded_app_when_build_succeeds_and_tests_succeed_should_succeed(self): + def test_smoke_test_when_build_succeeds_and_tests_succeed_should_succeed(self): create_artifacts( Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + result = self.runner.invoke(cli, ['smoke_tests']) self.assertEqual(result.exit_code, 0) @in_tempdir - def test_smoke_test_proguarded_app_should_invoke_gradle_with_expected_arguments(self): + def test_smoke_test_no_buildType_should_invoke_gradle_with_release_build_type(self): create_artifacts( Artifact( 'gradlew', @@ -105,36 +105,11 @@ def test_smoke_test_proguarded_app_should_invoke_gradle_with_expected_arguments( }), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_proguarded_app']) + result = self.runner.invoke(cli, ['smoke_tests']) self.assertEqual(result.exit_code, 0) @in_tempdir - def test_smoke_test_unproguarded_app_when_build_fails_should_fail(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) - result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) - self.assertNotEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_unproguarded_app_when_build_succeeds_and_tests_fails_should_fail(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), - Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) - self.assertNotEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_unproguarded_app_when_build_succeeds_and_tests_succeed_should_succeed(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), - Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) - self.assertEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_unproguarded_app_should_invoke_gradle_with_expected_arguments(self): + def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type(self): create_artifacts( Artifact( 'gradlew', @@ -151,6 +126,5 @@ def test_smoke_test_unproguarded_app_should_invoke_gradle_with_expected_argument }), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests_unproguarded_app']) + result = self.runner.invoke(cli, ['smoke_tests --appBuildVariant=debug']) self.assertEqual(result.exit_code, 0) - From 9d66db3e372e7278deeca0a14051b865f69fe90c Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 11:19:37 -0700 Subject: [PATCH 11/14] Formatting --- ci/fireci/fireci/commands.py | 154 ++++++++++++++++++++++++++------- ci/fireci/tests/integ_tests.py | 7 +- 2 files changed, 128 insertions(+), 33 deletions(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index 7d779eb1864..84b662cd8e3 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -12,37 +12,127 @@ # See the License for the specific language governing permissions and # limitations under the License. -import click import os +import pathlib +import subprocess +import unittest +import traceback -from . import gradle -from . import ci_command - - -@click.argument('task', required=True, nargs=-1) -@click.option( - '--gradle-opts', - default='', - help='GRADLE_OPTS passed to the gradle invocation.') -@ci_command('gradle') -def gradle_command(task, gradle_opts): - """Runs the specified gradle commands.""" - gradle.run(*task, gradle_opts=gradle_opts) - -@click.option( - '--appBuildVariant', - type=click.Choice(['debug', 'release']), - default='release', - help='App build variant to use while running the smoke Tests. One of release|debug') -@ci_command() -def smoke_tests(appBuildVariant): - """Builds all SDKs in release mode and then tests test-apps against them.""" - gradle.run('publishAllToBuildDir') - - cwd = os.getcwd() - gradle.run( - 'connectedCheck', - '-PtestBuildType=%s' % (appBuildVariant), - gradle_opts='-Dmaven.repo.local={}'.format(os.path.join(cwd, 'build', 'm2repository')), - workdir=os.path.join(cwd, 'test-apps'), - ) \ No newline at end of file +from click.testing import CliRunner +from fireci.main import cli + +from . import scripts +from .fileutil import ( + Artifact, + create_artifacts, + in_tempdir, +) + + +class CliInvocationTests(unittest.TestCase): + runner = CliRunner() + + @in_tempdir + def test_gradle_invocation(self): + args = ['--arg1', 'task1'] + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments_and_artifacts( + ['./gradlew'] + args, + {'GRADLE_OPTS': 'opts'}, + ('sdk1/build/output/file1', 'content1'), + ('sdk1/build/outputss/file2', 'content2'), + ), + mode=0o744)) + result = self.runner.invoke(cli, [ + '--artifact-patterns', '**/build/output', 'gradle', '--gradle-opts', + 'opts', '--' + ] + args) + self.assertEqual(result.exit_code, 0) + + artifacts = pathlib.Path('_artifacts') + self.assertTrue(artifacts.exists()) + + output_file = artifacts / 'sdk1_build_outputss' / 'file2' + self.assertFalse(output_file.exists()) + + output_file = artifacts / 'sdk1_build_output' / 'file1' + self.assertTrue(output_file.is_file()) + + with output_file.open() as f: + self.assertEqual(f.read(), 'content1') + + @in_tempdir + def test_smoke_test_when_build_fails_should_fail(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertNotEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_when_build_succeeds_and_tests_fails_should_fail(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), + Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertNotEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_when_build_succeeds_and_tests_succeed_should_succeed( + self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), + Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_no_buildType_should_invoke_gradle_with_release_build_type( + self): + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'publishAllToBuildDir']), + mode=0o744), + Artifact( + 'test-apps/gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'connectedCheck', '-PtestBuildType=release'], { + 'GRADLE_OPTS': + '-Dmaven.repo.local={}'.format( + os.path.join(os.getcwd(), 'build', 'm2repository')) + }), + mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type( + self): + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'publishAllToBuildDir']), + mode=0o744), + Artifact( + 'test-apps/gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'connectedCheck', '-PtestBuildType=debug'], { + 'GRADLE_OPTS': + '-Dmaven.repo.local={}'.format( + os.path.join(os.getcwd(), 'build', 'm2repository')) + }), + mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests --appBuildVssariant=debug']) + print("*******************************") + print(result) + traceback.print_exception(*result.exc_info) + # traceback.print_exception(*result.exc_info) + self.assertEqual(result.exit_code, 0) \ No newline at end of file diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index 6136efd297d..ac92dfa42f9 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -16,6 +16,7 @@ import pathlib import subprocess import unittest +import traceback from click.testing import CliRunner from fireci.main import cli @@ -126,5 +127,9 @@ def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type( }), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests --appBuildVariant=debug']) + result = self.runner.invoke(cli, ['smoke_tests --appBuildVssariant=debug']) + print("*******************************") + print(result) + traceback.print_exception(*result.exc_info) + # traceback.print_exception(*result.exc_info) self.assertEqual(result.exit_code, 0) From 591fae86877df398daf95eeec85993cb402fcd99 Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 11:21:03 -0700 Subject: [PATCH 12/14] Formatting --- ci/fireci/fireci/commands.py | 150 ++++++++--------------------------- 1 file changed, 32 insertions(+), 118 deletions(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index 84b662cd8e3..d61ee20ef8c 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -12,127 +12,41 @@ # See the License for the specific language governing permissions and # limitations under the License. +import click import os -import pathlib -import subprocess -import unittest -import traceback -from click.testing import CliRunner -from fireci.main import cli +from . import gradle +from . import ci_command -from . import scripts -from .fileutil import ( - Artifact, - create_artifacts, - in_tempdir, -) - - -class CliInvocationTests(unittest.TestCase): - runner = CliRunner() - - @in_tempdir - def test_gradle_invocation(self): - args = ['--arg1', 'task1'] - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments_and_artifacts( - ['./gradlew'] + args, - {'GRADLE_OPTS': 'opts'}, - ('sdk1/build/output/file1', 'content1'), - ('sdk1/build/outputss/file2', 'content2'), - ), - mode=0o744)) - result = self.runner.invoke(cli, [ - '--artifact-patterns', '**/build/output', 'gradle', '--gradle-opts', - 'opts', '--' - ] + args) - self.assertEqual(result.exit_code, 0) - - artifacts = pathlib.Path('_artifacts') - self.assertTrue(artifacts.exists()) - - output_file = artifacts / 'sdk1_build_outputss' / 'file2' - self.assertFalse(output_file.exists()) - output_file = artifacts / 'sdk1_build_output' / 'file1' - self.assertTrue(output_file.is_file()) +@click.argument('task', required=True, nargs=-1) +@click.option( + '--gradle-opts', + default='', + help='GRADLE_OPTS passed to the gradle invocation.') +@ci_command('gradle') +def gradle_command(task, gradle_opts): + """Runs the specified gradle commands.""" + gradle.run(*task, gradle_opts=gradle_opts) - with output_file.open() as f: - self.assertEqual(f.read(), 'content1') - @in_tempdir - def test_smoke_test_when_build_fails_should_fail(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertNotEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_when_build_succeeds_and_tests_fails_should_fail(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), - Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertNotEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_when_build_succeeds_and_tests_succeed_should_succeed( - self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), - Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_no_buildType_should_invoke_gradle_with_release_build_type( - self): - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'publishAllToBuildDir']), - mode=0o744), - Artifact( - 'test-apps/gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'connectedCheck', '-PtestBuildType=release'], { - 'GRADLE_OPTS': - '-Dmaven.repo.local={}'.format( - os.path.join(os.getcwd(), 'build', 'm2repository')) - }), - mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type( - self): - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'publishAllToBuildDir']), - mode=0o744), - Artifact( - 'test-apps/gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'connectedCheck', '-PtestBuildType=debug'], { - 'GRADLE_OPTS': - '-Dmaven.repo.local={}'.format( - os.path.join(os.getcwd(), 'build', 'm2repository')) - }), - mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests --appBuildVssariant=debug']) - print("*******************************") - print(result) - traceback.print_exception(*result.exc_info) - # traceback.print_exception(*result.exc_info) - self.assertEqual(result.exit_code, 0) \ No newline at end of file +@click.option( + '--appBuildVariant', + # type=click.Choice(['debug', 'release']), + default='release', + help= + 'App build variant to use while running the smoke Tests. One of release|debug' +) +@ci_command() +def smoke_tests(appBuildVariant): + """Builds all SDKs in release mode and then tests test-apps against them.""" + gradle.run('publishAllToBuildDir') + + cwd = os.getcwd() + gradle.run( + 'connectedCheck', + '-PtestBuildType=%s' % (appBuildVariant), + gradle_opts='-Dmaven.repo.local={}'.format( + os.path.join(cwd, 'build', 'm2repository')), + workdir=os.path.join(cwd, 'test-apps'), + ) \ No newline at end of file From b5117042fa3bc3f14ccbd1fe31d1146be7dbe1ab Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 11:40:27 -0700 Subject: [PATCH 13/14] Fixed tests --- ci/fireci/fireci/commands.py | 8 ++++---- ci/fireci/tests/integ_tests.py | 8 ++------ 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index d61ee20ef8c..aa70bee110a 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -31,21 +31,21 @@ def gradle_command(task, gradle_opts): @click.option( - '--appBuildVariant', - # type=click.Choice(['debug', 'release']), + '--app-build-variant', + type=click.Choice(['debug', 'release']), default='release', help= 'App build variant to use while running the smoke Tests. One of release|debug' ) @ci_command() -def smoke_tests(appBuildVariant): +def smoke_tests(app_build_variant): """Builds all SDKs in release mode and then tests test-apps against them.""" gradle.run('publishAllToBuildDir') cwd = os.getcwd() gradle.run( 'connectedCheck', - '-PtestBuildType=%s' % (appBuildVariant), + '-PtestBuildType=%s' % (app_build_variant), gradle_opts='-Dmaven.repo.local={}'.format( os.path.join(cwd, 'build', 'm2repository')), workdir=os.path.join(cwd, 'test-apps'), diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index ac92dfa42f9..6074251b8db 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -16,7 +16,6 @@ import pathlib import subprocess import unittest -import traceback from click.testing import CliRunner from fireci.main import cli @@ -127,9 +126,6 @@ def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type( }), mode=0o744), ) - result = self.runner.invoke(cli, ['smoke_tests --appBuildVssariant=debug']) - print("*******************************") - print(result) - traceback.print_exception(*result.exc_info) - # traceback.print_exception(*result.exc_info) + result = self.runner.invoke(cli, ['smoke_tests', '--app-build-variant', 'debug']) self.assertEqual(result.exit_code, 0) + From 5647bf06dc3f68d42804240f05c76a79f6dc347e Mon Sep 17 00:00:00 2001 From: ashwinraghav Date: Tue, 25 Sep 2018 12:23:16 -0700 Subject: [PATCH 14/14] Formatting --- ci/fireci/fireci/commands.py | 24 ++-- ci/fireci/tests/integ_tests.py | 203 +++++++++++++++++---------------- 2 files changed, 115 insertions(+), 112 deletions(-) diff --git a/ci/fireci/fireci/commands.py b/ci/fireci/fireci/commands.py index aa70bee110a..d32d4a5e7de 100644 --- a/ci/fireci/fireci/commands.py +++ b/ci/fireci/fireci/commands.py @@ -26,8 +26,8 @@ help='GRADLE_OPTS passed to the gradle invocation.') @ci_command('gradle') def gradle_command(task, gradle_opts): - """Runs the specified gradle commands.""" - gradle.run(*task, gradle_opts=gradle_opts) + """Runs the specified gradle commands.""" + gradle.run(*task, gradle_opts=gradle_opts) @click.option( @@ -39,14 +39,14 @@ def gradle_command(task, gradle_opts): ) @ci_command() def smoke_tests(app_build_variant): - """Builds all SDKs in release mode and then tests test-apps against them.""" - gradle.run('publishAllToBuildDir') + """Builds all SDKs in release mode and then tests test-apps against them.""" + gradle.run('publishAllToBuildDir') - cwd = os.getcwd() - gradle.run( - 'connectedCheck', - '-PtestBuildType=%s' % (app_build_variant), - gradle_opts='-Dmaven.repo.local={}'.format( - os.path.join(cwd, 'build', 'm2repository')), - workdir=os.path.join(cwd, 'test-apps'), - ) \ No newline at end of file + cwd = os.getcwd() + gradle.run( + 'connectedCheck', + '-PtestBuildType=%s' % (app_build_variant), + gradle_opts='-Dmaven.repo.local={}'.format( + os.path.join(cwd, 'build', 'm2repository')), + workdir=os.path.join(cwd, 'test-apps'), + ) diff --git a/ci/fireci/tests/integ_tests.py b/ci/fireci/tests/integ_tests.py index 6074251b8db..9af3ee33500 100644 --- a/ci/fireci/tests/integ_tests.py +++ b/ci/fireci/tests/integ_tests.py @@ -29,103 +29,106 @@ class CliInvocationTests(unittest.TestCase): - runner = CliRunner() - - @in_tempdir - def test_gradle_invocation(self): - args = ['--arg1', 'task1'] - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments_and_artifacts( - ['./gradlew'] + args, - {'GRADLE_OPTS': 'opts'}, - ('sdk1/build/output/file1', 'content1'), - ('sdk1/build/outputss/file2', 'content2'), - ), - mode=0o744)) - result = self.runner.invoke(cli, [ - '--artifact-patterns', '**/build/output', 'gradle', '--gradle-opts', - 'opts', '--' - ] + args) - self.assertEqual(result.exit_code, 0) - - artifacts = pathlib.Path('_artifacts') - self.assertTrue(artifacts.exists()) - - output_file = artifacts / 'sdk1_build_outputss' / 'file2' - self.assertFalse(output_file.exists()) - - output_file = artifacts / 'sdk1_build_output' / 'file1' - self.assertTrue(output_file.is_file()) - - with output_file.open() as f: - self.assertEqual(f.read(), 'content1') - - @in_tempdir - def test_smoke_test_when_build_fails_should_fail(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertNotEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_when_build_succeeds_and_tests_fails_should_fail(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), - Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertNotEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_when_build_succeeds_and_tests_succeed_should_succeed(self): - create_artifacts( - Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), - Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_no_buildType_should_invoke_gradle_with_release_build_type(self): - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'publishAllToBuildDir']), - mode=0o744), - Artifact( - 'test-apps/gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'connectedCheck', '-PtestBuildType=release'], { - 'GRADLE_OPTS': - '-Dmaven.repo.local={}'.format( - os.path.join(os.getcwd(), 'build', 'm2repository')) - }), - mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests']) - self.assertEqual(result.exit_code, 0) - - @in_tempdir - def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type(self): - create_artifacts( - Artifact( - 'gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'publishAllToBuildDir']), - mode=0o744), - Artifact( - 'test-apps/gradlew', - content=scripts.with_expected_arguments( - ['./gradlew', 'connectedCheck', '-PtestBuildType=debug'], { - 'GRADLE_OPTS': - '-Dmaven.repo.local={}'.format( - os.path.join(os.getcwd(), 'build', 'm2repository')) - }), - mode=0o744), - ) - result = self.runner.invoke(cli, ['smoke_tests', '--app-build-variant', 'debug']) - self.assertEqual(result.exit_code, 0) - + runner = CliRunner() + + @in_tempdir + def test_gradle_invocation(self): + args = ['--arg1', 'task1'] + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments_and_artifacts( + ['./gradlew'] + args, + {'GRADLE_OPTS': 'opts'}, + ('sdk1/build/output/file1', 'content1'), + ('sdk1/build/outputss/file2', 'content2'), + ), + mode=0o744)) + result = self.runner.invoke(cli, [ + '--artifact-patterns', '**/build/output', 'gradle', '--gradle-opts', + 'opts', '--' + ] + args) + self.assertEqual(result.exit_code, 0) + + artifacts = pathlib.Path('_artifacts') + self.assertTrue(artifacts.exists()) + + output_file = artifacts / 'sdk1_build_outputss' / 'file2' + self.assertFalse(output_file.exists()) + + output_file = artifacts / 'sdk1_build_output' / 'file1' + self.assertTrue(output_file.is_file()) + + with output_file.open() as f: + self.assertEqual(f.read(), 'content1') + + @in_tempdir + def test_smoke_test_when_build_fails_should_fail(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(1), mode=0o744)) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertNotEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_when_build_succeeds_and_tests_fails_should_fail(self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), + Artifact('test-apps/gradlew', content=scripts.with_exit(1), mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertNotEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_when_build_succeeds_and_tests_succeed_should_succeed( + self): + create_artifacts( + Artifact('gradlew', content=scripts.with_exit(0), mode=0o744), + Artifact('test-apps/gradlew', content=scripts.with_exit(0), mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_no_buildType_should_invoke_gradle_with_release_build_type( + self): + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'publishAllToBuildDir']), + mode=0o744), + Artifact( + 'test-apps/gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'connectedCheck', '-PtestBuildType=release'], { + 'GRADLE_OPTS': + '-Dmaven.repo.local={}'.format( + os.path.join(os.getcwd(), 'build', 'm2repository')) + }), + mode=0o744), + ) + result = self.runner.invoke(cli, ['smoke_tests']) + self.assertEqual(result.exit_code, 0) + + @in_tempdir + def test_smoke_test_with_buildType_should_invoke_gradle_with_release_build_type( + self): + create_artifacts( + Artifact( + 'gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'publishAllToBuildDir']), + mode=0o744), + Artifact( + 'test-apps/gradlew', + content=scripts.with_expected_arguments( + ['./gradlew', 'connectedCheck', '-PtestBuildType=debug'], { + 'GRADLE_OPTS': + '-Dmaven.repo.local={}'.format( + os.path.join(os.getcwd(), 'build', 'm2repository')) + }), + mode=0o744), + ) + result = self.runner.invoke(cli, + ['smoke_tests', '--app-build-variant', 'debug']) + self.assertEqual(result.exit_code, 0)