@@ -2430,6 +2430,256 @@ class ScopesTest {
2430
2430
2431
2431
// endregion
2432
2432
2433
+ // region logs
2434
+
2435
+ @Test
2436
+ fun `when captureLog is called on disabled client, do nothing` () {
2437
+ val (sut, mockClient) = getEnabledScopes {
2438
+ it.logs.isEnabled = true
2439
+ }
2440
+ sut.close()
2441
+
2442
+ sut.logger().warn(" test message" )
2443
+ verify(mockClient, never()).captureLog(any(), anyOrNull())
2444
+ }
2445
+
2446
+ @Test
2447
+ fun `when logging is not enabled, do nothing` () {
2448
+ val (sut, mockClient) = getEnabledScopes()
2449
+
2450
+ sut.logger().warn(" test message" )
2451
+ verify(mockClient, never()).captureLog(any(), anyOrNull())
2452
+ }
2453
+
2454
+ @Test
2455
+ fun `capturing null log does nothing` () {
2456
+ val (sut, mockClient) = getEnabledScopes {
2457
+ it.logs.isEnabled = true
2458
+ }
2459
+
2460
+ sut.logger().warn(null )
2461
+ verify(mockClient, never()).captureLog(any(), anyOrNull())
2462
+ }
2463
+
2464
+ @Test
2465
+ fun `creating trace log works` () {
2466
+ val (sut, mockClient) = getEnabledScopes {
2467
+ it.logs.isEnabled = true
2468
+ }
2469
+
2470
+ sut.logger().trace(" trace log message" )
2471
+
2472
+ verify(mockClient).captureLog(
2473
+ check {
2474
+ assertEquals(" trace log message" , it.body)
2475
+ assertEquals(SentryLogLevel .TRACE , it.level)
2476
+ assertEquals(1 , it.severityNumber)
2477
+ },
2478
+ anyOrNull()
2479
+ )
2480
+ }
2481
+
2482
+ @Test
2483
+ fun `creating debug log works` () {
2484
+ val (sut, mockClient) = getEnabledScopes {
2485
+ it.logs.isEnabled = true
2486
+ }
2487
+
2488
+ sut.logger().debug(" debug log message" )
2489
+
2490
+ verify(mockClient).captureLog(
2491
+ check {
2492
+ assertEquals(" debug log message" , it.body)
2493
+ assertEquals(SentryLogLevel .DEBUG , it.level)
2494
+ assertEquals(5 , it.severityNumber)
2495
+ },
2496
+ anyOrNull()
2497
+ )
2498
+ }
2499
+
2500
+ @Test
2501
+ fun `creating a info log works` () {
2502
+ val (sut, mockClient) = getEnabledScopes {
2503
+ it.logs.isEnabled = true
2504
+ }
2505
+
2506
+ sut.logger().info(" info log message" )
2507
+
2508
+ verify(mockClient).captureLog(
2509
+ check {
2510
+ assertEquals(" info log message" , it.body)
2511
+ assertEquals(SentryLogLevel .INFO , it.level)
2512
+ assertEquals(9 , it.severityNumber)
2513
+ },
2514
+ anyOrNull()
2515
+ )
2516
+ }
2517
+
2518
+ @Test
2519
+ fun `creating warn log works` () {
2520
+ val (sut, mockClient) = getEnabledScopes {
2521
+ it.logs.isEnabled = true
2522
+ }
2523
+
2524
+ sut.logger().warn(" warn log message" )
2525
+
2526
+ verify(mockClient).captureLog(
2527
+ check {
2528
+ assertEquals(" warn log message" , it.body)
2529
+ assertEquals(SentryLogLevel .WARN , it.level)
2530
+ assertEquals(13 , it.severityNumber)
2531
+ },
2532
+ anyOrNull()
2533
+ )
2534
+ }
2535
+
2536
+ @Test
2537
+ fun `creating error log works` () {
2538
+ val (sut, mockClient) = getEnabledScopes {
2539
+ it.logs.isEnabled = true
2540
+ }
2541
+
2542
+ sut.logger().error(" error log message" )
2543
+
2544
+ verify(mockClient).captureLog(
2545
+ check {
2546
+ assertEquals(" error log message" , it.body)
2547
+ assertEquals(SentryLogLevel .ERROR , it.level)
2548
+ assertEquals(17 , it.severityNumber)
2549
+ },
2550
+ anyOrNull()
2551
+ )
2552
+ }
2553
+
2554
+ @Test
2555
+ fun `creating fatal log works` () {
2556
+ val (sut, mockClient) = getEnabledScopes {
2557
+ it.logs.isEnabled = true
2558
+ }
2559
+
2560
+ sut.logger().fatal(" fatal log message" )
2561
+
2562
+ verify(mockClient).captureLog(
2563
+ check {
2564
+ assertEquals(" fatal log message" , it.body)
2565
+ assertEquals(SentryLogLevel .FATAL , it.level)
2566
+ assertEquals(21 , it.severityNumber)
2567
+ },
2568
+ anyOrNull()
2569
+ )
2570
+ }
2571
+
2572
+ @Test
2573
+ fun `creating log works` () {
2574
+ val (sut, mockClient) = getEnabledScopes {
2575
+ it.logs.isEnabled = true
2576
+ }
2577
+
2578
+ sut.logger().log(SentryLogLevel .WARN , " log message" )
2579
+
2580
+ verify(mockClient).captureLog(
2581
+ check {
2582
+ assertEquals(" log message" , it.body)
2583
+ assertEquals(SentryLogLevel .WARN , it.level)
2584
+ assertEquals(13 , it.severityNumber)
2585
+ },
2586
+ anyOrNull()
2587
+ )
2588
+ }
2589
+
2590
+ @Test
2591
+ fun `creating log with format string works` () {
2592
+ val (sut, mockClient) = getEnabledScopes {
2593
+ it.logs.isEnabled = true
2594
+ it.environment = " testenv"
2595
+ it.release = " 1.0"
2596
+ it.serverName = " srv1"
2597
+ }
2598
+
2599
+ sut.logger().log(SentryLogLevel .WARN , " log %s" , " arg1" )
2600
+
2601
+ verify(mockClient).captureLog(
2602
+ check {
2603
+ assertEquals(" log arg1" , it.body)
2604
+ assertEquals(SentryLogLevel .WARN , it.level)
2605
+ assertEquals(13 , it.severityNumber)
2606
+
2607
+ val template = it.attributes?.get(" sentry.message.template" )!!
2608
+ assertEquals(" log %s" , template.value)
2609
+ assertEquals(" string" , template.type)
2610
+
2611
+ val param0 = it.attributes?.get(" sentry.message.parameter.0" )!!
2612
+ assertEquals(" arg1" , param0.value)
2613
+ assertEquals(" string" , param0.type)
2614
+
2615
+ val environment = it.attributes?.get(" sentry.environment" )!!
2616
+ assertEquals(" testenv" , environment.value)
2617
+ assertEquals(" string" , environment.type)
2618
+
2619
+ val release = it.attributes?.get(" sentry.release" )!!
2620
+ assertEquals(" 1.0" , release.value)
2621
+ assertEquals(" string" , release.type)
2622
+
2623
+ val server = it.attributes?.get(" server.address" )!!
2624
+ assertEquals(" srv1" , server.value)
2625
+ assertEquals(" string" , server.type)
2626
+ },
2627
+ anyOrNull()
2628
+ )
2629
+ }
2630
+
2631
+ @Test
2632
+ fun `creating log with without args does not add template attribute` () {
2633
+ val (sut, mockClient) = getEnabledScopes {
2634
+ it.logs.isEnabled = true
2635
+ }
2636
+
2637
+ sut.logger().log(SentryLogLevel .WARN , " log %s" )
2638
+
2639
+ verify(mockClient).captureLog(
2640
+ check {
2641
+ assertEquals(" log %s" , it.body)
2642
+ assertEquals(SentryLogLevel .WARN , it.level)
2643
+ assertEquals(13 , it.severityNumber)
2644
+
2645
+ val template = it.attributes?.get(" sentry.message.template" )
2646
+ assertNull(template)
2647
+
2648
+ val param0 = it.attributes?.get(" sentry.message.parameter.0" )
2649
+ assertNull(param0)
2650
+ },
2651
+ anyOrNull()
2652
+ )
2653
+ }
2654
+
2655
+ @Test
2656
+ fun `captures format string on format error` () {
2657
+ val (sut, mockClient) = getEnabledScopes {
2658
+ it.logs.isEnabled = true
2659
+ }
2660
+
2661
+ sut.logger().log(SentryLogLevel .WARN , " log %d" , " arg1" )
2662
+
2663
+ verify(mockClient).captureLog(
2664
+ check {
2665
+ assertEquals(" log %d" , it.body)
2666
+ assertEquals(SentryLogLevel .WARN , it.level)
2667
+ assertEquals(13 , it.severityNumber)
2668
+
2669
+ val template = it.attributes?.get(" sentry.message.template" )!!
2670
+ assertEquals(" log %d" , template.value)
2671
+ assertEquals(" string" , template.type)
2672
+
2673
+ val param0 = it.attributes?.get(" sentry.message.parameter.0" )!!
2674
+ assertEquals(" arg1" , param0.value)
2675
+ assertEquals(" string" , param0.type)
2676
+ },
2677
+ anyOrNull()
2678
+ )
2679
+ }
2680
+
2681
+ // endregion
2682
+
2433
2683
@Test
2434
2684
fun `null tags do not cause NPE` () {
2435
2685
val scopes = generateScopes()
@@ -2467,7 +2717,7 @@ class ScopesTest {
2467
2717
return createScopes(options)
2468
2718
}
2469
2719
2470
- private fun getEnabledScopes (): Triple <Scopes , ISentryClient , ILogger > {
2720
+ private fun getEnabledScopes (optionsConfiguration : Sentry . OptionsConfiguration < SentryOptions > ? = null ): Triple <Scopes , ISentryClient , ILogger > {
2471
2721
val logger = mock<ILogger >()
2472
2722
2473
2723
val options = SentryOptions ()
@@ -2477,6 +2727,7 @@ class ScopesTest {
2477
2727
options.tracesSampleRate = 1.0
2478
2728
options.isDebug = true
2479
2729
options.setLogger(logger)
2730
+ optionsConfiguration?.configure(options)
2480
2731
2481
2732
val sut = createScopes(options)
2482
2733
val mockClient = createSentryClientMock()
0 commit comments