Uploaded image for project: 'Subscription Watch'
  1. Subscription Watch
  2. SWATCH-3221

Investigate flaky event_conflict_resolution tests

XMLWordPrintable

    • Icon: Task Task
    • Resolution: Done
    • Icon: Critical Critical
    • None
    • None
    • swatch-metrics
    • 5
    • False
    • Hide

      None

      Show
      None
    • True

      Failing tests:

      • test_event_conflict_resolution_multiple_event_source
      • test_event_conflict_resolution_multiple_product_tags

      Error message:

      AssertionError: Number of events does not match specified number of measurements.
      assert 0 == 1
       +  where 0 = len([])
       +  and   1 = len([3.0])
      

      Trace:

      application = <iqe.base.application.Application object at 0x7f8dbaff1a90>
      
          @pytest.mark.ephemeral
          def test_event_conflict_resolution_multiple_event_source(application):
              """Validate that event conflicts are resolved on ingestion.
              metadata:
                  assignee: aunayak
                  negative: false
                  importance: high
                  requirements: payg_tally
                  test_steps:
                      1. Reset the account
                      2. Create multiple events for the same instance/timestamp
                         with multiple event source through kafka message and  varying the measurement value.
                  expected_results:
                      1. Verify that as the events are created and conflicts
                         are resolved resulting in deduction events based on the event source.
              """
              application.rhsm_subscriptions.reset_account()
              org_id = application.user.identity.org_id
              start_date = datetime.now(timezone.utc) - timedelta(hours=1)
              end_date = datetime.now(timezone.utc) + timedelta(hours=2)
              # Create events via kafka with rhelmeter event source(when no events exist already)
              # Initial measurements, no deduction events expected.
              messages = [
                  {
                      "event_source": "rhelemeter",
                      "event_type": "snapshot_vCPUs",
                      "org_id": org_id,
                      "product_tag": ["rhel-for-x86-els-payg-addon"],
                      "product_ids": ["204", "69"],
                      "service_type": "RHEL System",
                      "display_name": "Rhel_cluster" + str(random.randint(1, 100)),
                      "measurements": [{"value": 3, "metric_id": "vCPUs"}],
                      "sla": "Premium",
                      "billing_provider": "aws",
                      "billing_account_id": "test-300",
                      "instance_id": "dummy_instance_id",
                      "timestamp": datetime_to_iso8601_format(start_date),
                      "expiration": datetime_to_iso8601_format(end_date),
                  }
              ]
              for message in messages:
                  application.rhsm_subscriptions.send_kafka_message(
                      "platform.rhsm-subscriptions.service-instance-ingress", message
                  )
          
              rhelmeter_events = application.rhsm_subscriptions.poll_for_events(
                  hours=7,
                  predicate=lambda e: e["instance_id"] == "dummy_instance_id"
                  and e["measurements"][0]["metric_id"] == "vCPUs"
                  and e["product_tag"][0] == "rhel-for-x86-els-payg-addon"
                  and e["event_source"] == "rhelemeter",
                  expected_events=1,
              )
              assert rhelmeter_events
      >       _assert_measurement_total(
                  rhelmeter_events, start_date, org_id, "dummy_instance_id", "vCPUs", [3.0], True
              )
      
      /iqe_venv/lib/python3.11/site-packages/iqe_rhsm_subscriptions/tests/integration/swatch_metrics/test_events.py:294: 
      _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
      
      current_events = [{'billing_account_id': 'test-300', 'billing_provider': 'aws', 'conversion': False, 'display_name': 'Rhel_cluster79', ...}]
      start = datetime.datetime(2025, 1, 11, 4, 58, 16, 682110, tzinfo=datetime.timezone.utc)
      org_id = '18064240', instance_id = 'dummy_instance_id', metric_id = 'vCPUs'
      ordered_values = [3.0], event_via_kafka = True
      timestamp = '2025-01-11T04:58:16.682110Z'
      
          def _assert_measurement_total(
              current_events,
              start,
              org_id,
              instance_id,
              metric_id,
              ordered_values,
              event_via_kafka=False,
              timestamp=None,
          ):
              """
              :param bool event_via_kafka : True if event created via kafka else False
              """
              if event_via_kafka:
                  timestamp = datetime_to_iso8601_format(start)
              elif not timestamp:
                  timestamp = datetime_to_iso8601_format(start.replace(minute=0, second=0, microsecond=0))
              to_check = list(
                  filter(
                      lambda e: _filter_event(org_id, timestamp, instance_id, metric_id, e), current_events
                  )
              )
              # Assumes one measurement value per event as that is how events are currently created.
      >       assert len(to_check) == len(ordered_values), (
                  "Number of events does not match specified number of measurements."
              )
      E       AssertionError: Number of events does not match specified number of measurements.
      E       assert 0 == 1
      E        +  where 0 = len([])
      E        +  and   1 = len([3.0])
      
      /iqe_venv/lib/python3.11/site-packages/iqe_rhsm_subscriptions/tests/integration/swatch_metrics/test_events.py:448: AssertionError
      

      Output:

      --------------------------------- Captured Log ---------------------------------
      2025-01-11 05:58:14 INFO Flushing usage messages off from billable usage kafka topic
      2025-01-11 05:58:14 INFO PUT request response url: http://swatch-billable-usage-service:8000/api/swatch-billable-usage/internal/rpc/topics/flush, status_code: 200
      2025-01-11 05:58:14 INFO Trace log using : 00-00000000000000000000000000000000-0000000000000000-00  
      2025-01-11 05:58:14 INFO Response: {
          "status": "Success"
      }
      2025-01-11 05:58:16 INFO DELETE request response url: http://swatch-tally-service:8000/api/rhsm-subscriptions/v1/internal/rpc/tally/18064240, status_code: 200
      2025-01-11 05:58:16 INFO Trace log using : 00-7000eca7237690a241667aeea4f5406e-2bc3cc9af6e435ee-00  
      2025-01-11 05:58:16 INFO Response: {
          "detail": "Finished deleting data associated with organization 18064240"
      }
      2025-01-11 05:58:16 INFO Reset moto b'{"status": "ok"}'
      2025-01-11 05:58:16 INFO Sending the following kafka message to platform.rhsm-subscriptions.service-instance-ingress:
       {'event_source': 'rhelemeter', 'event_type': 'snapshot_vCPUs', 'org_id': '18064240', 'product_tag': ['rhel-for-x86-els-payg-addon'], 'product_ids': ['204', '69'], 'service_type': 'RHEL System', 'display_name': 'Rhel_cluster79', 'measurements': [{'value': 3, 'metric_id': 'vCPUs'}], 'sla': 'Premium', 'billing_provider': 'aws', 'billing_account_id': 'test-300', 'instance_id': 'dummy_instance_id', 'timestamp': '2025-01-11T04:58:16.682110Z', 'expiration': '2025-01-11T07:58:16.682119Z'}
      2025-01-11 05:58:16 INFO POST request response url: http://kafka-bridge-bridge-service:8080/topics/platform.rhsm-subscriptions.service-instance-ingress, status_code: 200
      2025-01-11 05:58:16 INFO Trace log using : None
      2025-01-11 05:58:16 INFO Response: {
          "offsets": [
              {
                  "offset": 30,
                  "partition": 1
              }
          ]
      }
      2025-01-11 05:58:16 INFO GET request response url: http://swatch-tally-service:8000/api/rhsm-subscriptions/v1/internal/rpc/tally/events/18064240?begin=2025-01-10T22%3A58%3A16.700110Z&end=2025-01-11T05%3A58%3A16.700133Z, status_code: 200
      2025-01-11 05:58:16 INFO Trace log using : 00-fca2790a5e1799ce94150949db6c784b-e6ea327af931d187-00  
      2025-01-11 05:58:16 INFO Response: {
          "detail": "[{\"event_source\":\"rhelemeter\",\"event_type\":\"snapshot_vCPUs\",\"org_id\":\"18064240\",\"instance_id\":\"dummy_instance_id\",\"event_id\":\"04da92d5-9798-41f3-b464-0352e7485d18\",\"service_type\":\"RHEL System\",\"timestamp\":\"2025-01-11T04:58:16.68211Z\",\"record_date\":\"2025-01-11T05:58:16.702108775Z\",\"expiration\":\"2025-01-11T07:58:16.682119Z\",\"display_name\":\"Rhel_cluster79\",\"measurements\":[{\"value\":3.0,\"metric_id\":\"vCPUs\"}],\"product_ids\":[\"204\",\"69\"],\"sla\":\"Premium\",\"billing_provider\":\"aws\",\"billing_account_id\":\"test-300\",\"product_tag\":[\"rhel-for-x86-els-payg-addon\"],\"conversion\":false}]"
      }
      --------------------------------- Captured Out ---------------------------------
      

      Links:

              rhn-sqe-tmcknigh Trayvon McKnight
              jcarvaja@redhat.com Jose Carvajal Hilario
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: