require 'helper'

class AzureMonitorMetricsInputTest < Test::Unit::TestCase
  def setup
    Fluent::Test.setup
  end

  ### for monitor metrics
  CONFIG_MONITOR_METRICS = %[
    tag azuremonitormetrics
    tenant_id test_tenant_id
    client_id test_client_id
    client_secret test_client_secret

    timespan          300
    aggregation       Average,count
    interval          PT1M
    resource_uri      /subscriptions/b324c52b-4073-4807-93af-e07d289c093e/resourceGroups/test/providers/Microsoft.Storage/storageAccounts/larryshoebox/blobServices/default/providers/Microsoft.Insights/metrics/BlobCapacity
    top               20
    orderby           sum asc
    filter            timeGrain eq duration'PT1M' and (name.value eq 'Network Out' or name.value eq 'Percentage CPU') and (aggregationType eq 'Average' or aggregationType eq 'Count') and startTime eq 2017-10-11T23:00:00Z and endTime eq 2017-11-22T15:00:00Z
    result_type       Success
    api_version       2016-09-01
  ]

  def create_driver_monitor_metrics(conf = CONFIG_MONITOR_METRICS)
    Fluent::Test::InputTestDriver.new(Fluent::AzureMonitorMetricsInput).configure(conf)
  end

  def test_configure_monitor_metrics
    d = create_driver_monitor_metrics
    assert_equal 'azuremonitormetrics', d.instance.tag
    assert_equal 'test_tenant_id', d.instance.tenant_id
    assert_equal 'test_client_id', d.instance.client_id
    assert_equal 300, d.instance.timespan
    assert_equal '/subscriptions/b324c52b-4073-4807-93af-e07d289c093e/resourceGroups/test/providers/Microsoft.Storage/storageAccounts/larryshoebox/blobServices/default/providers/Microsoft.Insights/metrics/BlobCapacity', d.instance.resource_uri
    assert_equal 20, d.instance.top
    assert_equal 'sum asc', d.instance.orderby
    assert_equal "timeGrain eq duration'PT1M' and (name.value eq 'Network Out' or name.value eq 'Percentage CPU') and (aggregationType eq 'Average' or aggregationType eq 'Count') and startTime eq 2017-10-11T23:00:00Z and endTime eq 2017-11-22T15:00:00Z", d.instance.filter
    assert_equal 'Success', d.instance.result_type
    assert_equal '2016-09-01', d.instance.api_version
  end

  def test_set_query_options
    d = create_driver_monitor_metrics
    start_time = Time.now - 1000
    end_time = Time.now
    query_options = d.instance.set_path_options(start_time, end_time, {})
    assert_equal '2016-09-01', query_options[:query_params]['api-version']
    assert_equal "timeGrain eq duration'PT1M' and (name.value eq 'Network Out' or name.value eq 'Percentage CPU') and (aggregationType eq 'Average' or aggregationType eq 'Count') and startTime eq #{start_time.utc.iso8601} and endTime eq #{end_time.utc.iso8601}", query_options[:query_params]['$filter']
    assert_equal 20, query_options[:query_params]['$top']
    assert_equal 'sum asc', query_options[:query_params]['$orderby']
    assert_equal 'Success', query_options[:query_params]['resultType']
    assert_equal '/subscriptions/b324c52b-4073-4807-93af-e07d289c093e/resourceGroups/test/providers/Microsoft.Storage/storageAccounts/larryshoebox/blobServices/default/providers/Microsoft.Insights/metrics/BlobCapacity', query_options[:path_params]['resourceUri']
  end

end