github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/test/groovy/com/sap/piper/analytics/TelemetryTest.groovy (about) 1 package com.sap.piper.analytics 2 3 import org.junit.Rule 4 import org.junit.Before 5 import org.junit.Test 6 import static org.junit.Assert.assertThat 7 import static org.junit.Assume.assumeThat 8 import org.junit.rules.ExpectedException 9 import org.junit.rules.RuleChain 10 11 import static org.hamcrest.Matchers.allOf 12 import static org.hamcrest.Matchers.containsString 13 import static org.hamcrest.Matchers.empty 14 import static org.hamcrest.Matchers.is 15 import static org.hamcrest.Matchers.not 16 import static org.hamcrest.Matchers.startsWith 17 18 import util.JenkinsLoggingRule 19 import util.JenkinsShellCallRule 20 import util.BasePiperTest 21 import util.Rules 22 23 class TelemetryTest extends BasePiperTest { 24 private ExpectedException thrown = ExpectedException.none() 25 private JenkinsLoggingRule jlr = new JenkinsLoggingRule(this) 26 private JenkinsShellCallRule jscr = new JenkinsShellCallRule(this) 27 28 @Rule 29 public RuleChain rules = Rules 30 .getCommonRules(this) 31 .around(thrown) 32 .around(jscr) 33 .around(jlr) 34 35 private parameters 36 37 @Before 38 void setup() { 39 Telemetry.instance = null 40 parameters = [:] 41 } 42 43 @Test 44 void testCreateInstance() { 45 Telemetry.instance = new Telemetry() 46 // asserts 47 assertThat(Telemetry.getInstance().listenerList, is(empty())) 48 } 49 50 @Test 51 void testGetInstance() { 52 // asserts 53 assertThat(Telemetry.getInstance().listenerList, is(not(empty()))) 54 } 55 56 @Test 57 void testRegisterListenerAndNotify() { 58 // prepare 59 Map notificationPayload = [:] 60 Telemetry.instance = new Telemetry() 61 assumeThat(Telemetry.getInstance().listenerList, is(empty())) 62 63 Telemetry.registerListener({ steps, payload -> 64 notificationPayload = payload 65 }) 66 // test 67 Telemetry.notify(nullScript, [collectTelemetryData: true], [step: 'anyStep', anything: 'something']) 68 // asserts 69 assertThat(Telemetry.getInstance().listenerList, is(not(empty()))) 70 assertThat(notificationPayload, is([step: 'anyStep', anything: 'something'])) 71 } 72 73 @Test 74 void testNotifyWithOptOut() { 75 // prepare 76 Map notificationPayload = [:] 77 Telemetry.instance = new Telemetry() 78 assumeThat(Telemetry.getInstance().listenerList, is(empty())) 79 Telemetry.registerListener({ steps, payload -> 80 notificationPayload = payload 81 }) 82 // test 83 Telemetry.notify(nullScript, [collectTelemetryData: false], [step: 'anyStep', anything: 'something']) 84 // asserts 85 assertThat(Telemetry.getInstance().listenerList, is(not(empty()))) 86 assertThat(jlr.log, containsString("[anyStep] Sending telemetry data is disabled.")) 87 assertThat(notificationPayload.keySet(), is(empty())) 88 } 89 90 @Test 91 void testNotifyWithOptOutWithEmptyConfig() { 92 // prepare 93 Map notificationPayload = [:] 94 Telemetry.instance = new Telemetry() 95 assumeThat(Telemetry.getInstance().listenerList, is(empty())) 96 Telemetry.registerListener({ steps, payload -> 97 notificationPayload = payload 98 }) 99 // test 100 Telemetry.notify(nullScript, [:], [step: 'anyStep', anything: 'something']) 101 // asserts 102 assertThat(Telemetry.getInstance().listenerList, is(not(empty()))) 103 assertThat(jlr.log, containsString("[anyStep] Sending telemetry data is disabled.")) 104 assertThat(notificationPayload.keySet(), is(empty())) 105 } 106 107 @Test 108 void testNotifyWithOptOutWithoutConfig() { 109 // prepare 110 Map notificationPayload = [:] 111 Telemetry.instance = new Telemetry() 112 assumeThat(Telemetry.getInstance().listenerList, is(empty())) 113 Telemetry.registerListener({ steps, payload -> 114 notificationPayload = payload 115 }) 116 // test 117 Telemetry.notify(nullScript, null, [step: 'anyStep', anything: 'something']) 118 // asserts 119 assertThat(Telemetry.getInstance().listenerList, is(not(empty()))) 120 assertThat(jlr.log, containsString("[anyStep] Sending telemetry data is disabled.")) 121 assertThat(notificationPayload.keySet(), is(empty())) 122 } 123 124 @Test 125 void testReportingToSWA() { 126 def httpParams = null 127 helper.registerAllowedMethod('httpRequest', [Map.class], {m -> 128 httpParams = m 129 }) 130 helper.registerAllowedMethod("timeout", [Map.class, Closure.class], { m,c -> 131 c() 132 }) 133 // prepare 134 assumeThat(Telemetry.getInstance().listenerList, is(not(empty()))) 135 // test 136 Telemetry.notify(nullScript, [collectTelemetryData: true], [ 137 actionName: 'Piper Library OS', 138 eventType: 'library-os', 139 jobUrlSha1: '1234', 140 buildUrlSha1: 'abcd', 141 step: 'anyStep', 142 stepParam1: 'something' 143 ]) 144 // asserts 145 assertThat(httpParams, is(not(null))) 146 assertThat(httpParams.url.toString(), allOf( 147 startsWith('https://webanalytics.cfapps.eu10.hana.ondemand.com/tracker/log?'), 148 containsString('action_name=Piper+Library+OS'), 149 containsString('event_type=library-os'), 150 containsString('custom3=anyStep'), 151 containsString('custom4=1234'), 152 containsString('custom5=abcd'), 153 containsString('custom11=something') 154 )) 155 } 156 }