Skip to content

Commit 00fe91a

Browse files
Test application framework
1 parent 080d548 commit 00fe91a

File tree

19 files changed

+398
-7
lines changed

19 files changed

+398
-7
lines changed

ConvivaTestApp/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

ConvivaTestApp/build.gradle

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
plugins {
2+
id 'com.android.application'
3+
id 'kotlin-android'
4+
}
5+
6+
android {
7+
compileSdkVersion 30
8+
buildToolsVersion "30.0.3"
9+
10+
defaultConfig {
11+
applicationId "com.bitmovin.analytics.conviva.testapp"
12+
minSdkVersion 28
13+
targetSdkVersion 30
14+
versionCode 1
15+
versionName "1.0"
16+
//multiDexEnabled true
17+
//testInstrumentationRunner "com.example.dexopener.DexOpeningTestRunner"
18+
19+
// Default test runner
20+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
21+
}
22+
buildTypes {
23+
debug {
24+
//multiDexEnabled true
25+
debuggable true
26+
}
27+
release {
28+
minifyEnabled false
29+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
30+
}
31+
}
32+
compileOptions {
33+
sourceCompatibility JavaVersion.VERSION_1_8
34+
targetCompatibility JavaVersion.VERSION_1_8
35+
}
36+
kotlinOptions {
37+
jvmTarget = '1.8'
38+
}
39+
}
40+
41+
dependencies {
42+
implementation 'androidx.appcompat:appcompat:1.0.0'
43+
implementation "com.bitmovin.player:playercore:2.67.0"
44+
45+
implementation "com.google.ads.interactivemedia.v3:interactivemedia:3.19.4" // Needed for Ad Support
46+
implementation "com.google.android.gms:play-services-ads:19.3.0" // Needed for Ad Support
47+
implementation 'androidx.legacy:legacy-support-v4:1.0.0' // Needed for Ad Support
48+
49+
implementation project(path: ':conviva')
50+
51+
testImplementation 'junit:junit:4.12'
52+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
53+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
54+
//androidTestImplementation 'androidx.test:core:1.2.0'
55+
//androidTestImplementation 'androidx.test:runner:1.2.0'
56+
//androidTestImplementation 'androidx.test:rules:1.2.0'
57+
androidTestImplementation "io.mockk:mockk-android:1.12.0"
58+
}

ConvivaTestApp/proguard-rules.pro

Whitespace-only changes.
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package com.bitmovin.analytics.conviva.testapp
2+
3+
import androidx.test.core.app.ActivityScenario
4+
import com.bitmovin.analytics.conviva.ConvivaAnalytics
5+
import com.bitmovin.analytics.conviva.ConvivaConfiguration
6+
import com.bitmovin.analytics.conviva.MetadataOverrides
7+
import com.conviva.api.Client
8+
import io.mockk.*
9+
10+
import androidx.test.ext.junit.runners.AndroidJUnit4
11+
import com.conviva.api.ClientSettings
12+
import org.junit.Before
13+
import org.junit.Assert
14+
import org.junit.Test
15+
import org.junit.runner.RunWith
16+
17+
@RunWith(AndroidJUnit4::class)
18+
class ConvivaAnalyticsTest {
19+
var customMetadataOverride: MetadataOverrides? = null
20+
var convivaConfig: ConvivaConfiguration? = null
21+
var convivaAnalytics: ConvivaAnalytics? = null
22+
23+
@Before
24+
fun setup() {
25+
// Create your ConvivaConfiguration object
26+
convivaConfig = ConvivaConfiguration()
27+
convivaConfig!!.gatewayUrl = "https://bitmovin.com"
28+
convivaConfig!!.isDebugLoggingEnabled = true
29+
customMetadataOverride = MetadataOverrides()
30+
}
31+
32+
@Before
33+
fun tearDown() {
34+
convivaAnalytics = null
35+
}
36+
37+
@Test
38+
fun test_createConvivaAnalyticsWithValidPlayer() {
39+
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
40+
activityScenario.onActivity { activity: MainActivity ->
41+
try {
42+
mockkConstructor(ClientSettings::class)
43+
mockkConstructor(Client::class)
44+
every {
45+
anyConstructed<ClientSettings>().isInitialized // Mocks the constructor which takes a String
46+
} returns true
47+
every {
48+
anyConstructed<Client>().isInitialized // Mocks the constructor which takes a String
49+
} returns true
50+
// Create ConvivaAnalytics
51+
convivaAnalytics = ConvivaAnalytics(
52+
activity.bitmovinPlayer,
53+
"test",
54+
activity.applicationContext,
55+
convivaConfig)
56+
} catch (e: Exception) {
57+
// Expectation is to not receive any exception
58+
Assert.assertTrue("Received unexpected exception: $e", false)
59+
}
60+
}
61+
activityScenario.onActivity { activity: MainActivity? -> convivaAnalytics = null }
62+
activityScenario.close()
63+
unmockkConstructor(Client::class)
64+
unmockkConstructor(ClientSettings::class)
65+
}
66+
67+
@Test
68+
fun test_setOverrideMetadataBeforeSessionStarted() {
69+
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
70+
activityScenario.onActivity { activity: MainActivity ->
71+
try {
72+
mockkConstructor(ClientSettings::class)
73+
mockkConstructor(Client::class)
74+
every {
75+
anyConstructed<ClientSettings>().isInitialized // Mocks the constructor which takes a String
76+
} returns true
77+
every {
78+
anyConstructed<Client>().isInitialized // Mocks the constructor which takes a String
79+
} returns true
80+
// Create ConvivaAnalytics
81+
convivaAnalytics = ConvivaAnalytics(
82+
activity.bitmovinPlayer,
83+
"test",
84+
activity.applicationContext,
85+
convivaConfig)
86+
customMetadataOverride = MetadataOverrides()
87+
convivaAnalytics!!.updateContentMetadata(customMetadataOverride)
88+
} catch (e: Exception) {
89+
// Expectation is to not receive any exception
90+
Assert.assertTrue("Received unexpected exception: $e", false)
91+
}
92+
}
93+
activityScenario.onActivity { activity: MainActivity? -> convivaAnalytics = null }
94+
activityScenario.close()
95+
unmockkConstructor(Client::class)
96+
unmockkConstructor(ClientSettings::class)
97+
}
98+
99+
@Test
100+
fun test_trackSessionStartManualPlay() {
101+
val activityScenario = ActivityScenario.launch(MainActivity::class.java)
102+
activityScenario.onActivity { activity: MainActivity ->
103+
mockkConstructor(ClientSettings::class)
104+
mockkConstructor(Client::class)
105+
every {
106+
anyConstructed<ClientSettings>().isInitialized // Mocks the constructor which takes a String
107+
} returns true
108+
every {
109+
anyConstructed<Client>().isInitialized // Mocks the constructor which takes a String
110+
} returns true
111+
// Create ConvivaAnalytics
112+
convivaAnalytics = ConvivaAnalytics(
113+
activity.bitmovinPlayer,
114+
"test",
115+
activity.applicationContext,
116+
convivaConfig)
117+
customMetadataOverride = MetadataOverrides()
118+
convivaAnalytics!!.updateContentMetadata(customMetadataOverride)
119+
activity.bitmovinPlayer.play()
120+
verify(atLeast = 1, timeout = 5000) { anyConstructed<ClientSettings>().isInitialized }
121+
verify(atLeast = 1, timeout = 10000) { anyConstructed<Client>().playerStateManager }
122+
}
123+
124+
activityScenario.onActivity { activity: MainActivity -> activity.bitmovinPlayer.destroy() }
125+
activityScenario.close()
126+
unmockkConstructor(Client::class)
127+
unmockkConstructor(ClientSettings::class)
128+
}
129+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="com.bitmovin.analytics.conviva.testapp">
4+
5+
<uses-permission android:name="android.permission.INTERNET" />
6+
7+
<application
8+
android:allowBackup="true"
9+
android:icon="@mipmap/ic_launcher"
10+
android:label="@string/app_name"
11+
android:supportsRtl="true"
12+
android:theme="@style/AppTheme"
13+
android:networkSecurityConfig="@xml/network_security_config">
14+
<activity android:name="com.bitmovin.analytics.conviva.testapp.MainActivity">
15+
<intent-filter>
16+
<action android:name="android.intent.action.MAIN" />
17+
18+
<category android:name="android.intent.category.LAUNCHER" />
19+
</intent-filter>
20+
</activity>
21+
22+
<uses-library android:name="android.test.runner"
23+
android:required="false" />
24+
<meta-data
25+
android:name="BITMOVIN_PLAYER_LICENSE_KEY"
26+
android:value="YOUR_LICENSE_KEY"/>
27+
<meta-data
28+
android:name="com.google.android.gms.ads.AD_MANAGER_APP"
29+
android:value="true"/>
30+
</application>
31+
32+
</manifest>
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package com.bitmovin.analytics.conviva.testapp;
2+
3+
import android.os.Bundle;
4+
import android.content.Intent;
5+
import androidx.appcompat.app.AppCompatActivity;
6+
import android.widget.LinearLayout;
7+
8+
import com.bitmovin.analytics.conviva.ConvivaAnalytics;
9+
import com.bitmovin.analytics.conviva.ConvivaAnalyticsException;
10+
import com.bitmovin.analytics.conviva.ConvivaConfiguration;
11+
import com.bitmovin.analytics.conviva.MetadataOverrides;
12+
import com.bitmovin.player.BitmovinPlayer;
13+
import com.bitmovin.player.BitmovinPlayerView;
14+
import com.bitmovin.player.BitmovinPlayer;
15+
import com.bitmovin.player.config.PlayerConfiguration;
16+
import com.bitmovin.player.config.advertising.AdItem;
17+
import com.bitmovin.player.config.advertising.AdSource;
18+
import com.bitmovin.player.config.advertising.AdSourceType;
19+
import com.bitmovin.player.config.advertising.AdvertisingConfiguration;
20+
import com.bitmovin.player.config.media.SourceConfiguration;
21+
import com.bitmovin.player.config.PlaybackConfiguration;
22+
23+
public class MainActivity extends AppCompatActivity
24+
{
25+
public static final String AUTOPLAY_KEY = "autoplay";
26+
public static final String VMAP_KEY = "vmapTag";
27+
public static final String SOURCE_KEY = "source";
28+
29+
public BitmovinPlayerView bitmovinPlayerView;
30+
public SourceConfiguration bitmovinSourceConfiguration;
31+
public PlaybackConfiguration bitmovinPlaybackConfiguration;
32+
public AdvertisingConfiguration bitmovinAdConfiguration;
33+
public PlayerConfiguration bitmovinPlayerConfiguration;
34+
public BitmovinPlayer bitmovinPlayer;
35+
36+
@Override
37+
protected void onCreate(Bundle savedInstanceState)
38+
{
39+
super.onCreate(savedInstanceState);
40+
41+
setContentView(R.layout.activity_main);
42+
43+
// Get the Intent that started this activity and extract the string
44+
Intent intent = getIntent();
45+
Boolean autoPlay = intent.getBooleanExtra(MainActivity.AUTOPLAY_KEY, false);
46+
String vmapTagUrl = intent.getStringExtra(MainActivity.VMAP_KEY);
47+
String sourceUrl = intent.getStringExtra(MainActivity.SOURCE_KEY);
48+
49+
// Create a new source configuration
50+
String defaultSourceUrl = "https://bitmovin-a.akamaihd.net/content/MI201109210084_1/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd";
51+
this.bitmovinSourceConfiguration = new SourceConfiguration();
52+
// Add a new source item
53+
if (sourceUrl == null) {
54+
this.bitmovinSourceConfiguration.addSourceItem(defaultSourceUrl);
55+
} else {
56+
this.bitmovinSourceConfiguration.addSourceItem(sourceUrl);
57+
}
58+
59+
this.bitmovinPlaybackConfiguration = new PlaybackConfiguration();
60+
this.bitmovinPlaybackConfiguration.setAutoplayEnabled(autoPlay);
61+
62+
// Creating a new PlayerConfiguration
63+
this.bitmovinPlayerConfiguration = new PlayerConfiguration();
64+
// Assign created SourceConfiguration to the PlayerConfiguration
65+
this.bitmovinPlayerConfiguration.setSourceConfiguration(bitmovinSourceConfiguration);
66+
this.bitmovinPlayerConfiguration.setPlaybackConfiguration(bitmovinPlaybackConfiguration);
67+
68+
69+
// Create AdSources
70+
if (vmapTagUrl != null) {
71+
AdSource vmapAdSource = new AdSource(AdSourceType.IMA, vmapTagUrl);
72+
73+
// Setup ad
74+
AdItem vmapAdRoll = new AdItem("", vmapAdSource);
75+
76+
// Add the AdItems to the AdvertisingConfiguration
77+
this.bitmovinAdConfiguration = new AdvertisingConfiguration(vmapAdRoll);
78+
// Assing the AdvertisingConfiguration to the PlayerConfiguration
79+
// All ads in the AdvertisingConfiguration will be scheduled automatically
80+
this.bitmovinPlayerConfiguration.setAdvertisingConfiguration(this.bitmovinAdConfiguration);
81+
}
82+
83+
// Create new BitmovinPlayerView with our PlayerConfiguration
84+
this.bitmovinPlayerView = new BitmovinPlayerView(this, bitmovinPlayerConfiguration);
85+
this.bitmovinPlayerView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
86+
87+
LinearLayout rootView = (LinearLayout) this.findViewById(R.id.activity_main);
88+
89+
// Add BitmovinPlayerView to the layout
90+
rootView.addView(this.bitmovinPlayerView, 0);
91+
92+
this.bitmovinPlayer = bitmovinPlayerView.getPlayer();
93+
}
94+
95+
@Override
96+
protected void onStart()
97+
{
98+
super.onStart();
99+
this.bitmovinPlayerView.onStart();
100+
}
101+
102+
@Override
103+
protected void onResume()
104+
{
105+
super.onResume();
106+
this.bitmovinPlayerView.onResume();
107+
}
108+
109+
@Override
110+
protected void onPause()
111+
{
112+
this.bitmovinPlayerView.onPause();
113+
super.onPause();
114+
}
115+
116+
@Override
117+
protected void onStop()
118+
{
119+
this.bitmovinPlayerView.onStop();
120+
super.onStop();
121+
}
122+
123+
@Override
124+
protected void onDestroy()
125+
{
126+
this.bitmovinPlayerView.onDestroy();
127+
super.onDestroy();
128+
}
129+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:tools="http://schemas.android.com/tools"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
android:id="@+id/activity_main"
7+
tools:context="com.bitmovin.analytics.conviva.testapp.MainActivity">
8+
9+
</LinearLayout>
Loading
Loading
Loading
Loading
Loading
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<color name="colorPrimary">#3F51B5</color>
4+
<color name="colorPrimaryDark">#303F9F</color>
5+
<color name="colorAccent">#FF4081</color>
6+
</resources>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<resources>
2+
<string name="app_name">BitmovinConvivaAnalyticsTestApp</string>
3+
</resources>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<resources>
2+
3+
<!-- Base application theme. -->
4+
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
5+
<!-- Customize your theme here. -->
6+
<item name="colorPrimary">@color/colorPrimary</item>
7+
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
8+
<item name="colorAccent">@color/colorAccent</item>
9+
</style>
10+
11+
</resources>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<network-security-config>
3+
<debug-overrides>
4+
<trust-anchors>
5+
<!-- Trust user added CAs while debuggable only -->
6+
<certificates src="user" />
7+
</trust-anchors>
8+
</debug-overrides>
9+
</network-security-config>

0 commit comments

Comments
 (0)