spec/elastic_apm/spies/azure_storage_table_spec.rb (215 lines of code) (raw):

# Licensed to Elasticsearch B.V. under one or more contributor # license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright # ownership. Elasticsearch B.V. licenses this file to you under # the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # # frozen_string_literal: true require "spec_helper" enabled = true # Azure::Storage doesn't support Ruby 3 yet so skip if we can't load begin require "azure/storage/table" rescue LoadError enabled = false end if enabled module ElasticAPM RSpec.describe "Spy: Azure Storage Table" do let(:client) do common_client = ::Azure::Storage::Common::Client.create( storage_account_name: "abc", # lib validates valid Base64 storage_access_key: Base64.encode64("xyz"), storage_table_host: "https://my-account.table.core.windows.net" ) ::Azure::Storage::Table::TableService.new(client: common_client) end def stub_server(method, path, body: {}) stub = stub_request( method, "https://my-account.table.core.windows.net#{path}" ).to_return(body: body&.to_json) yield expect(stub).to have_been_requested end describe '#create_table', :intercept do it 'adds a span' do stub_server(:post, "/Tables") do with_agent do ElasticAPM.with_transaction do client.create_table("testtable") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Create testtable") expect(span.type).to eq("storage") expect(span.subtype).to eq("azuretable") expect(span.action).to eq("Create") expect(span.outcome).to eq("success") # span context destination expect(span.context.destination.address).to eq("my-account.table.core.windows.net") expect(span.context.destination.port).to eq(443) expect(span.context.destination.service.resource).to eq("azuretable/my-account") end end describe "#delete_table", :intercept do it 'adds a span' do stub_server(:delete, "/Tables('testtable')") do with_agent do ElasticAPM.with_transaction do client.delete_table("testtable") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Delete testtable") expect(span.action).to eq("Delete") end end describe "#get_table", :intercept do it 'adds a span' do stub_server(:get, "/Tables('testtable')") do with_agent do ElasticAPM.with_transaction do client.get_table("testtable") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable GetTable testtable") expect(span.action).to eq("GetTable") end end describe "#get_table_acl", :intercept do it 'adds a span' do stub_server(:get, "/testtable?comp=acl", body: nil) do with_agent do ElasticAPM.with_transaction do client.get_table_acl("testtable") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable GetAcl testtable") expect(span.action).to eq("GetAcl") end end describe "#set_table_acl", :intercept do it 'adds a span' do stub_server(:put, "/testtable?comp=acl") do with_agent do ElasticAPM.with_transaction do client.set_table_acl("testtable") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable SetAcl testtable") expect(span.action).to eq("SetAcl") end end describe "#insert_entity", :intercept do it 'adds a span' do stub_server(:post, "/testtable()", body: { "best" => "true" }) do with_agent do ElasticAPM.with_transaction do client.insert_entity("testtable", {best: "true"}) end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Insert testtable") expect(span.action).to eq("Insert") end end describe "#query_entities", :intercept do it 'adds a span' do stub_server(:get, "/testtable()") do with_agent do ElasticAPM.with_transaction do client.query_entities("testtable") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Query testtable") expect(span.action).to eq("Query") end end describe "#update_entity", :intercept do it 'adds a span' do stub_server(:put, "/testtable()") do with_agent do ElasticAPM.with_transaction do client.update_entity("testtable", {best: "true"}) end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Update testtable") expect(span.action).to eq("Update") end end describe "#merge_entity", :intercept do it 'adds a span' do stub_server(:post, "/testtable()") do with_agent do ElasticAPM.with_transaction do client.merge_entity("testtable", {best: "true"}) end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Merge testtable") expect(span.action).to eq("Merge") end end describe "#delete_entity", :intercept do it 'adds a span' do stub_server(:delete, "/testtable(PartitionKey='test-partition-key',RowKey='1')") do with_agent do ElasticAPM.with_transaction do client.delete_entity("testtable", "test-partition-key", "1") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Delete testtable") expect(span.action).to eq("Delete") end end describe "#get_entity", :intercept do it 'adds a span' do stub_server(:get, "/testtable(PartitionKey='test-partition-key',RowKey='1')") do with_agent do ElasticAPM.with_transaction do client.get_entity("testtable", "test-partition-key", "1") end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable Query testtable") expect(span.action).to eq("Query") end end describe "#query_tables", :intercept do it 'adds a span' do stub_server(:get, "/Tables") do with_agent do ElasticAPM.with_transaction do client.query_tables() end end end expect(@intercepted.spans.length).to be(1) span, = @intercepted.spans expect(span.name).to eq("AzureTable QueryTables") expect(span.action).to eq("QueryTables") end end end end end