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  }