title 'Resource Group Type Counts'

control 'azure-resource-group-1.0' do
  impact 1.0
  title 'Ensure that the specified resource group has the correct number of Azure resources and metadata'

  # Obtain counts for all resources in the resource group
  describe azure_resource_group(name: 'Inspec-Azure') do
    # Ensure that the name is correct - this is a little superfluous as this was used to select the resource
    its('name') { should cmp 'Inspec-Azure' }

    # Where in Azure is the resource group located
    its('location') { should cmp 'westeurope' }

    # Was the resource group provisionned successfully?
    its('provisioning_state') { should cmp 'Succeeded' }

    # Make sure that the resource group has tags on it
    it { should have_tags }
    its('tag_count') { should be 1 }
    its('tags') { should include 'CreatedBy' }
    its('CreatedBy_tag') { should cmp 'InSpec Azure Integration Tests' }

    # How many resources are in the resource group in total
    its('total') { should eq 13 }

    # Does the RG have virtual machines and how many
    it { should have_vms }
    its('vm_count') { should eq 3 }

    # Does the RG have network cards and how many
    it { should have_nics }
    its('nic_count') { should eq 3 }

    # Does the RG have any public ip addresses and how many
    it { should have_public_ips }
    its('public_ip_count') { should eq 1 }

    # Does the RG have network security groups and how many
    it { should have_nsgs }
    its('nsg_count') { should eq 1 }

    # Does the RG have storage accounts and how many
    it { should have_sas }
    its('sa_count') { should eq 1 }

    # Does the RG have virtual networks and how many
    it { should have_vnets }
    its('vnet_count') { should eq 1 }

    # Does the RG have managed disks and how many
    it { should have_managed_disks }
    its('managed_disk_count') { should eq 3 }

    # Does the RG have managed disk images
    it { should_not have_managed_disk_images }
    its('managed_disk_image_count') { should eq 0 }
  end
end
