awspec 0.69.1 → 0.70.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -1
  3. data/.travis.yml +1 -0
  4. data/Rakefile +10 -1
  5. data/awspec.gemspec +3 -3
  6. data/doc/_resource_types/cloudwatch_logs.md +40 -0
  7. data/doc/_resource_types/ec2_account_attributes.md +8 -0
  8. data/doc/_resource_types/lambda_account_settings.md +10 -0
  9. data/doc/_resource_types/rds_account_attributes.md +8 -0
  10. data/doc/_resource_types/ses_send_quota.md +9 -0
  11. data/doc/contributing.md +10 -0
  12. data/doc/resource_types.md +262 -27
  13. data/lib/awspec/error.rb +2 -0
  14. data/lib/awspec/ext.rb +1 -0
  15. data/lib/awspec/ext/hash.rb +10 -0
  16. data/lib/awspec/generator.rb +6 -0
  17. data/lib/awspec/generator/doc/type.rb +35 -1
  18. data/lib/awspec/generator/doc/type/account.rb +71 -0
  19. data/lib/awspec/generator/doc/type/account_attribute.rb +69 -0
  20. data/lib/awspec/generator/doc/type/account_attribute_base.rb +32 -0
  21. data/lib/awspec/generator/doc/type/base.rb +10 -3
  22. data/lib/awspec/generator/doc/type/cloudwatch_logs.rb +17 -0
  23. data/lib/awspec/generator/doc/type/ec2_account_attributes.rb +17 -0
  24. data/lib/awspec/generator/doc/type/lambda_account_settings.rb +17 -0
  25. data/lib/awspec/generator/doc/type/rds_account_attributes.rb +17 -0
  26. data/lib/awspec/generator/doc/type/ses_send_quota.rb +17 -0
  27. data/lib/awspec/generator/template.rb +38 -1
  28. data/lib/awspec/helper/finder.rb +8 -1
  29. data/lib/awspec/helper/finder/account_attributes.rb +61 -0
  30. data/lib/awspec/helper/finder/cloudwatch_logs.rb +35 -0
  31. data/lib/awspec/helper/type.rb +31 -0
  32. data/lib/awspec/matcher.rb +3 -0
  33. data/lib/awspec/matcher/have_subscription_filter.rb +9 -0
  34. data/lib/awspec/shared_context.rb +8 -0
  35. data/lib/awspec/stub/account.rb +146 -0
  36. data/lib/awspec/stub/cloudwatch_logs.rb +34 -0
  37. data/lib/awspec/stub/ecs.rb +9 -9
  38. data/lib/awspec/stub/ecs_cluster.rb +9 -9
  39. data/lib/awspec/stub/ecs_container_instance.rb +9 -9
  40. data/lib/awspec/toolbox.rb +6 -1
  41. data/lib/awspec/type/account.rb +35 -0
  42. data/lib/awspec/type/account_attribute.rb +28 -0
  43. data/lib/awspec/type/account_attribute_base.rb +4 -0
  44. data/lib/awspec/type/acm.rb +1 -1
  45. data/lib/awspec/type/alb.rb +1 -1
  46. data/lib/awspec/type/ami.rb +1 -1
  47. data/lib/awspec/type/autoscaling_group.rb +3 -2
  48. data/lib/awspec/type/base.rb +6 -25
  49. data/lib/awspec/type/cloudfront_distribution.rb +1 -1
  50. data/lib/awspec/type/cloudtrail.rb +1 -1
  51. data/lib/awspec/type/cloudwatch_alarm.rb +1 -1
  52. data/lib/awspec/type/cloudwatch_event.rb +1 -1
  53. data/lib/awspec/type/cloudwatch_logs.rb +27 -0
  54. data/lib/awspec/type/customer_gateway.rb +1 -1
  55. data/lib/awspec/type/directconnect_virtual_interface.rb +1 -1
  56. data/lib/awspec/type/ebs.rb +1 -1
  57. data/lib/awspec/type/ec2.rb +1 -1
  58. data/lib/awspec/type/ec2_account_attributes.rb +7 -0
  59. data/lib/awspec/type/ecr_repository.rb +1 -1
  60. data/lib/awspec/type/ecs_cluster.rb +1 -1
  61. data/lib/awspec/type/ecs_container_instance.rb +1 -1
  62. data/lib/awspec/type/ecs_service.rb +1 -1
  63. data/lib/awspec/type/ecs_task_definition.rb +1 -1
  64. data/lib/awspec/type/efs.rb +1 -1
  65. data/lib/awspec/type/elasticache.rb +1 -1
  66. data/lib/awspec/type/elasticache_cache_parameter_group.rb +1 -1
  67. data/lib/awspec/type/elasticsearch.rb +1 -1
  68. data/lib/awspec/type/elastictranscoder_pipeline.rb +1 -1
  69. data/lib/awspec/type/elb.rb +3 -2
  70. data/lib/awspec/type/iam_group.rb +1 -1
  71. data/lib/awspec/type/iam_policy.rb +1 -1
  72. data/lib/awspec/type/iam_role.rb +1 -1
  73. data/lib/awspec/type/iam_user.rb +1 -1
  74. data/lib/awspec/type/internet_gateway.rb +1 -1
  75. data/lib/awspec/type/kms.rb +1 -1
  76. data/lib/awspec/type/lambda.rb +1 -1
  77. data/lib/awspec/type/lambda_account_settings.rb +7 -0
  78. data/lib/awspec/type/launch_configuration.rb +1 -1
  79. data/lib/awspec/type/nat_gateway.rb +1 -1
  80. data/lib/awspec/type/network_acl.rb +1 -1
  81. data/lib/awspec/type/network_interface.rb +1 -1
  82. data/lib/awspec/type/rds.rb +1 -1
  83. data/lib/awspec/type/rds_account_attributes.rb +7 -0
  84. data/lib/awspec/type/rds_db_cluster_parameter_group.rb +1 -1
  85. data/lib/awspec/type/rds_db_parameter_group.rb +1 -1
  86. data/lib/awspec/type/resource_base.rb +24 -0
  87. data/lib/awspec/type/route53_hosted_zone.rb +1 -1
  88. data/lib/awspec/type/route_table.rb +1 -1
  89. data/lib/awspec/type/s3_bucket.rb +1 -1
  90. data/lib/awspec/type/security_group.rb +1 -1
  91. data/lib/awspec/type/ses_identity.rb +1 -1
  92. data/lib/awspec/type/ses_send_quota.rb +7 -0
  93. data/lib/awspec/type/subnet.rb +1 -1
  94. data/lib/awspec/type/vpc.rb +1 -1
  95. data/lib/awspec/type/vpn_connection.rb +1 -1
  96. data/lib/awspec/type/vpn_gateway.rb +1 -1
  97. data/lib/awspec/type/waf_web_acl.rb +1 -1
  98. data/lib/awspec/version.rb +1 -1
  99. metadata +36 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f58f45b2a249eb3fae5d4fe74a9c9aa15b548c6
4
- data.tar.gz: e7d332fb6543ace555ef35c6ab26ac9f301d05fd
3
+ metadata.gz: fbc433c70382704905947b4081e9840c9bf2183d
4
+ data.tar.gz: 4e42d218ba02d6e44682fa77eb26f1d287222684
5
5
  SHA512:
6
- metadata.gz: f2c4b05f4335ba4b133ee5872fc9be38716a7cfababfae2d8eba7282b5dcdc1bb509a481a3751a2c113b902e9e30c6f4f137802ca5e941ddee30b63c2d677520
7
- data.tar.gz: 43ff7acc66916f1469c8539b5dce475a4ea29704afd3e6594f09f1264b6bc0616551f9cffc593336e1016df94b34bd2cbb63e20f7e31f6d71f435cf005f2af2f
6
+ metadata.gz: 4fa1b9088672ee9f3684c7198f0de7a2481d6607dae9e44274dd4fbf4b16f90d5cb7961c6687584db8bf9452d09ef27fa0a4467cab7d7d6fdb5f3a16a99de44d
7
+ data.tar.gz: 7eb06937cf09a4528594844a18b57c12ec42e3d0c365d68ed84c09f6474ef6f3503000b541293b5a049de7918da948e748a592de482fca27748fdcbf117184f7
@@ -16,6 +16,9 @@ Metrics/AbcSize:
16
16
  Metrics/ClassLength:
17
17
  Max: 120
18
18
 
19
+ Metrics/BlockLength:
20
+ Max: 60
21
+
19
22
  Metrics/CyclomaticComplexity:
20
23
  Max: 15
21
24
 
@@ -26,7 +29,7 @@ Metrics/MethodLength:
26
29
  Max: 30
27
30
 
28
31
  Metrics/ModuleLength:
29
- CountComments: false
32
+ CountComments: false
30
33
  Max: 200
31
34
 
32
35
  Metrics/PerceivedComplexity:
@@ -47,6 +50,9 @@ Style/ClassAndModuleChildren:
47
50
  Style/Documentation:
48
51
  Enabled: false
49
52
 
53
+ Style/MethodMissing:
54
+ Enabled: false
55
+
50
56
  Style/MutableConstant:
51
57
  Enabled: false
52
58
 
@@ -56,6 +62,12 @@ Style/MultilineOperationIndentation:
56
62
  Style/MultilineMethodCallBraceLayout:
57
63
  Enabled: false
58
64
 
65
+ Style/NumericLiteralPrefix:
66
+ Enabled: false
67
+
68
+ Style/NumericPredicate:
69
+ Enabled: false
70
+
59
71
  Style/StabbyLambdaParentheses:
60
72
  Enabled: false
61
73
 
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.4.0
3
4
  - 2.3.3
4
5
  - 2.2.6
5
6
  - 2.1.10
data/Rakefile CHANGED
@@ -16,7 +16,12 @@ end
16
16
  if defined?(RSpec)
17
17
  task spec: 'spec:all'
18
18
  namespace :spec do
19
- task all: ['spec:type', 'spec:core', 'spec:generator_spec', 'spec:generator_doc', 'spec:rubocop']
19
+ task all: ['spec:type',
20
+ 'spec:account',
21
+ 'spec:core',
22
+ 'spec:generator_spec',
23
+ 'spec:generator_doc',
24
+ 'spec:rubocop']
20
25
 
21
26
  task type: types
22
27
 
@@ -26,6 +31,10 @@ if defined?(RSpec)
26
31
  end
27
32
  end
28
33
 
34
+ RSpec::Core::RakeTask.new(:account) do |t|
35
+ t.pattern = 'spec/type/account_spec.rb'
36
+ end
37
+
29
38
  RSpec::Core::RakeTask.new(:core) do |t|
30
39
  t.pattern = 'spec/core/*_spec.rb'
31
40
  end
@@ -22,14 +22,14 @@ Gem::Specification.new do |spec|
22
22
  spec.required_ruby_version = '>= 2.1'
23
23
  spec.add_runtime_dependency 'rspec', '~> 3.0'
24
24
  spec.add_runtime_dependency 'rspec-its'
25
- spec.add_runtime_dependency 'aws-sdk', '>= 2.2', '< 2.8'
25
+ spec.add_runtime_dependency 'aws-sdk', '>= 2.2', '< 2.9'
26
26
  spec.add_runtime_dependency 'awsecrets', '~> 1.8'
27
27
  spec.add_runtime_dependency 'thor'
28
28
  spec.add_runtime_dependency 'activesupport', '~> 4.0'
29
29
  spec.add_runtime_dependency 'term-ansicolor'
30
30
  spec.add_development_dependency 'bundler', '~> 1.9'
31
- spec.add_development_dependency 'rake', '~> 10.0'
32
- spec.add_development_dependency 'rubocop', '~> 0.40.0'
31
+ spec.add_development_dependency 'rake', '~> 12.0'
32
+ spec.add_development_dependency 'rubocop', '~> 0.47.0'
33
33
  spec.add_development_dependency 'octorelease'
34
34
  spec.add_development_dependency 'pry'
35
35
  end
@@ -0,0 +1,40 @@
1
+ ### exist
2
+
3
+ ```ruby
4
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
5
+ it { should exist }
6
+ end
7
+ ```
8
+
9
+ ### have_log_stream
10
+
11
+ ```ruby
12
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
13
+ it { should have_log_stream('my-cloudwatch-logs-stream') }
14
+ end
15
+ ```
16
+
17
+ ### have_metric_filter
18
+
19
+ ```ruby
20
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
21
+ it { should have_metric_filter('my-cloudwatch-logs-metric-filter') }
22
+ end
23
+ ```
24
+
25
+ ### have_subscription_filter
26
+
27
+ ```ruby
28
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
29
+ it { should have_subscription_filter('my-cloudwatch-logs-subscription-filter') }
30
+ end
31
+ ```
32
+ or
33
+ ```ruby
34
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
35
+ it do
36
+ should have_subscription_filter('my-cloudwatch-logs-subscription-filter')\
37
+ .filter_pattern('[host, ident, authuser, date, request, status, bytes]')
38
+ end
39
+ end
40
+ ```
@@ -0,0 +1,8 @@
1
+ ### first
2
+
3
+ ```ruby
4
+ describe ec2_account_attributes do
5
+ its(:supported_platforms) { should include 'VPC' }
6
+ its(:max_instances) { should eq 20 }
7
+ end
8
+ ```
@@ -0,0 +1,10 @@
1
+ ### first
2
+
3
+ ```ruby
4
+ describe lambda_account_settings do
5
+ its('total_code_size.limit') { should eq 80_530_636_800 }
6
+ its('total_code_size.usage') { should eq 2_034_651_562 }
7
+ its('function_count.usage') { should eq 8 }
8
+ end
9
+ ```
10
+
@@ -0,0 +1,8 @@
1
+ ### first
2
+
3
+ ```ruby
4
+ describe rds_account_attributes do
5
+ its('DBInstances.used') { should eq 0 }
6
+ its('DBInstances.max') { should eq 40 }
7
+ end
8
+ ```
@@ -0,0 +1,9 @@
1
+ ### first
2
+
3
+ ```ruby
4
+ describe ses_send_quota do
5
+ its(:max_24_hour_send) { should eq 200.0 }
6
+ its(:max_send_rate) { should eq 1.0 }
7
+ its(:sent_last_24_hours) { should eq 1.0 }
8
+ end
9
+ ```
@@ -10,6 +10,16 @@
10
10
  6. Push to the branch (`git push origin add-type-redshift`)
11
11
  7. Create a new Pull Request
12
12
 
13
+ ## Add new account attribute type (ex. CloudFormation::Client#describe_account_attributes )
14
+
15
+ 1. Create your feature branch (`git checkout -b add-type-cf-limit`)
16
+ 2. Generate template files (`bundle exec bin/toolbox template cloudformation_account_attributes -a`) **with -a option**
17
+ 3. Fill files with code.
18
+ 4. Generate [doc/resource_types.md](doc/resource_types.md) (`bundle exec bin/toolbox docgen > doc/resource_types.md`)
19
+ 5. Run test (`bundle exec rake spec`)
20
+ 6. Push to the branch (`git push origin add-type-redshift`)
21
+ 7. Create a new Pull Request
22
+
13
23
  ## Append resource type document (ex. VPC resource `be_available`)
14
24
 
15
25
  1. Create vpc.md (`touch doc/_resource_types/vpc.md`)
@@ -1,11 +1,15 @@
1
1
  # Resource Types
2
2
 
3
- [alb](#alb)
3
+ [acm](#acm)
4
+ | [alb](#alb)
4
5
  | [ami](#ami)
5
6
  | [autoscaling_group](#autoscaling_group)
7
+ | [cloudfront_distribution](#cloudfront_distribution)
6
8
  | [cloudtrail](#cloudtrail)
7
9
  | [cloudwatch_alarm](#cloudwatch_alarm)
8
10
  | [cloudwatch_event](#cloudwatch_event)
11
+ | [cloudwatch_logs](#cloudwatch_logs)
12
+ | [customer_gateway](#customer_gateway)
9
13
  | [directconnect_virtual_interface](#directconnect_virtual_interface)
10
14
  | [ebs](#ebs)
11
15
  | [ec2](#ec2)
@@ -18,11 +22,13 @@
18
22
  | [elasticache](#elasticache)
19
23
  | [elasticache_cache_parameter_group](#elasticache_cache_parameter_group)
20
24
  | [elasticsearch](#elasticsearch)
25
+ | [elastictranscoder_pipeline](#elastictranscoder_pipeline)
21
26
  | [elb](#elb)
22
27
  | [iam_group](#iam_group)
23
28
  | [iam_policy](#iam_policy)
24
29
  | [iam_role](#iam_role)
25
30
  | [iam_user](#iam_user)
31
+ | [internet_gateway](#internet_gateway)
26
32
  | [kms](#kms)
27
33
  | [lambda](#lambda)
28
34
  | [launch_configuration](#launch_configuration)
@@ -39,14 +45,10 @@
39
45
  | [ses_identity](#ses_identity)
40
46
  | [subnet](#subnet)
41
47
  | [vpc](#vpc)
42
- | [cloudfront_distribution](#cloudfront_distribution)
43
- | [elastictranscoder_pipeline](#elastictranscoder_pipeline)
44
- | [waf_web_acl](#waf_web_acl)
45
- | [customer_gateway](#customer_gateway)
46
- | [vpn_gateway](#vpn_gateway)
47
48
  | [vpn_connection](#vpn_connection)
48
- | [internet_gateway](#internet_gateway)
49
- | [acm](#acm)
49
+ | [vpn_gateway](#vpn_gateway)
50
+ | [waf_web_acl](#waf_web_acl)
51
+ | [account](#account)
50
52
 
51
53
  ## <a name="alb">alb</a>
52
54
 
@@ -54,7 +56,7 @@ ALB resource type.
54
56
 
55
57
  ### exist
56
58
 
57
- ### its(:load_balancer_arn), its(:dns_name), its(:canonical_hosted_zone_id), its(:created_time), its(:load_balancer_name), its(:scheme), its(:vpc_id), its(:state), its(:type), its(:ip_address_type)
59
+ ### its(:load_balancer_arn), its(:dns_name), its(:canonical_hosted_zone_id), its(:created_time), its(:load_balancer_name), its(:scheme), its(:vpc_id), its(:state), its(:type), its(:availability_zones), its(:security_groups), its(:ip_address_type)
58
60
  ## <a name="ami">ami</a>
59
61
 
60
62
  AMI resource type.
@@ -77,7 +79,7 @@ end
77
79
  ```
78
80
 
79
81
 
80
- ### its(:image_id), its(:image_location), its(:state), its(:owner_id), its(:creation_date), its(:public), its(:architecture), its(:image_type), its(:kernel_id), its(:ramdisk_id), its(:platform), its(:sriov_net_support), its(:ena_support), its(:state_reason), its(:image_owner_alias), its(:name), its(:description), its(:root_device_type), its(:root_device_name), its(:virtualization_type), its(:hypervisor)
82
+ ### its(:image_id), its(:image_location), its(:state), its(:owner_id), its(:creation_date), its(:public), its(:architecture), its(:image_type), its(:kernel_id), its(:ramdisk_id), its(:platform), its(:sriov_net_support), its(:ena_support), its(:state_reason), its(:image_owner_alias), its(:name), its(:description), its(:root_device_type), its(:root_device_name), its(:virtualization_type), its(:tags), its(:hypervisor)
81
83
  ### :unlock: Advanced use
82
84
 
83
85
  `ami` can use `Aws::EC2::Image` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Image.html).
@@ -121,7 +123,7 @@ describe autoscaling_group('my-auto-scaling-group') do
121
123
  end
122
124
  ```
123
125
 
124
- ### its(:auto_scaling_group_name), its(:auto_scaling_group_arn), its(:launch_configuration_name), its(:min_size), its(:max_size), its(:desired_capacity), its(:default_cooldown), its(:health_check_type), its(:health_check_grace_period), its(:created_time), its(:placement_group), its(:vpc_zone_identifier), its(:status), its(:new_instances_protected_from_scale_in)
126
+ ### its(:auto_scaling_group_name), its(:auto_scaling_group_arn), its(:launch_configuration_name), its(:min_size), its(:max_size), its(:desired_capacity), its(:default_cooldown), its(:availability_zones), its(:load_balancer_names), its(:target_group_arns), its(:health_check_type), its(:health_check_grace_period), its(:created_time), its(:suspended_processes), its(:placement_group), its(:vpc_zone_identifier), its(:enabled_metrics), its(:status), its(:termination_policies), its(:new_instances_protected_from_scale_in)
125
127
  ## <a name="cloudtrail">cloudtrail</a>
126
128
 
127
129
  Cloudtrail resource type.
@@ -219,7 +221,7 @@ describe cloudwatch_alarm('my-cloudwatch-alarm') do
219
221
  end
220
222
  ```
221
223
 
222
- ### its(:alarm_name), its(:alarm_arn), its(:alarm_description), its(:alarm_configuration_updated_timestamp), its(:actions_enabled), its(:state_value), its(:state_reason), its(:state_reason_data), its(:state_updated_timestamp), its(:metric_name), its(:namespace), its(:statistic), its(:extended_statistic), its(:period), its(:unit), its(:evaluation_periods), its(:threshold), its(:comparison_operator)
224
+ ### its(:alarm_name), its(:alarm_arn), its(:alarm_description), its(:alarm_configuration_updated_timestamp), its(:actions_enabled), its(:ok_actions), its(:alarm_actions), its(:insufficient_data_actions), its(:state_value), its(:state_reason), its(:state_reason_data), its(:state_updated_timestamp), its(:metric_name), its(:namespace), its(:statistic), its(:extended_statistic), its(:period), its(:unit), its(:evaluation_periods), its(:threshold), its(:comparison_operator)
223
225
  ## <a name="cloudwatch_event">cloudwatch_event</a>
224
226
 
225
227
  CloudwatchEvent resource type.
@@ -266,7 +268,7 @@ describe directconnect_virtual_interface('my-directconnect-virtual-interface') d
266
268
  end
267
269
  ```
268
270
 
269
- ### its(:owner_account), its(:virtual_interface_id), its(:location), its(:connection_id), its(:virtual_interface_type), its(:virtual_interface_name), its(:vlan), its(:asn), its(:auth_key), its(:amazon_address), its(:customer_address), its(:address_family), its(:virtual_interface_state), its(:customer_router_config), its(:virtual_gateway_id), its(:bgp_peers)
271
+ ### its(:owner_account), its(:virtual_interface_id), its(:location), its(:connection_id), its(:virtual_interface_type), its(:virtual_interface_name), its(:vlan), its(:asn), its(:auth_key), its(:amazon_address), its(:customer_address), its(:address_family), its(:virtual_interface_state), its(:customer_router_config), its(:virtual_gateway_id), its(:route_filter_prefixes), its(:bgp_peers)
270
272
  ## <a name="ebs">ebs</a>
271
273
 
272
274
  EBS resource type.
@@ -472,7 +474,7 @@ end
472
474
  ```
473
475
 
474
476
 
475
- ### its(:instance_id), its(:image_id), its(:private_dns_name), its(:public_dns_name), its(:state_transition_reason), its(:key_name), its(:ami_launch_index), its(:instance_type), its(:launch_time), its(:placement), its(:kernel_id), its(:ramdisk_id), its(:platform), its(:monitoring), its(:subnet_id), its(:vpc_id), its(:private_ip_address), its(:public_ip_address), its(:state_reason), its(:architecture), its(:root_device_type), its(:root_device_name), its(:virtualization_type), its(:instance_lifecycle), its(:spot_instance_request_id), its(:client_token), its(:source_dest_check), its(:hypervisor), its(:ebs_optimized), its(:sriov_net_support), its(:ena_support)
477
+ ### its(:instance_id), its(:image_id), its(:private_dns_name), its(:public_dns_name), its(:state_transition_reason), its(:key_name), its(:ami_launch_index), its(:product_codes), its(:instance_type), its(:launch_time), its(:placement), its(:kernel_id), its(:ramdisk_id), its(:platform), its(:monitoring), its(:subnet_id), its(:vpc_id), its(:private_ip_address), its(:public_ip_address), its(:state_reason), its(:architecture), its(:root_device_type), its(:root_device_name), its(:virtualization_type), its(:instance_lifecycle), its(:spot_instance_request_id), its(:client_token), its(:source_dest_check), its(:hypervisor), its(:ebs_optimized), its(:sriov_net_support), its(:ena_support)
476
478
  ### :unlock: Advanced use
477
479
 
478
480
  `ec2` can use `Aws::EC2::Instance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Instance.html).
@@ -575,7 +577,7 @@ describe ecs_service('my-ecs-service') do
575
577
  end
576
578
  ```
577
579
 
578
- ### its(:service_arn), its(:service_name), its(:cluster_arn), its(:status), its(:desired_count), its(:running_count), its(:pending_count), its(:task_definition), its(:role_arn), its(:created_at), its(:placement_constraints), its(:placement_strategy)
580
+ ### its(:service_arn), its(:service_name), its(:cluster_arn), its(:load_balancers), its(:status), its(:desired_count), its(:running_count), its(:pending_count), its(:task_definition), its(:role_arn), its(:created_at), its(:placement_constraints), its(:placement_strategy)
579
581
  ## <a name="ecs_task_definition">ecs_task_definition</a>
580
582
 
581
583
  ECS Task Definition resource type.
@@ -597,7 +599,7 @@ describe ecs_task_definition('my-ecs-task-definition') do
597
599
  end
598
600
  ```
599
601
 
600
- ### its(:task_definition_arn), its(:family), its(:task_role_arn), its(:network_mode), its(:revision), its(:status), its(:requires_attributes), its(:placement_constraints)
602
+ ### its(:task_definition_arn), its(:family), its(:task_role_arn), its(:network_mode), its(:revision), its(:volumes), its(:status), its(:requires_attributes), its(:placement_constraints)
601
603
  ## <a name="efs">efs</a>
602
604
 
603
605
  EFS resource type.
@@ -677,7 +679,7 @@ describe elasticache('my-rep-group-001') do
677
679
  end
678
680
  ```
679
681
 
680
- ### its(:cache_cluster_id), its(:configuration_endpoint), its(:client_download_landing_page), its(:cache_node_type), its(:engine), its(:engine_version), its(:cache_cluster_status), its(:num_cache_nodes), its(:preferred_availability_zone), its(:cache_cluster_create_time), its(:preferred_maintenance_window), its(:notification_configuration), its(:cache_subnet_group_name), its(:auto_minor_version_upgrade), its(:replication_group_id), its(:snapshot_retention_limit), its(:snapshot_window)
682
+ ### its(:cache_cluster_id), its(:configuration_endpoint), its(:client_download_landing_page), its(:cache_node_type), its(:engine), its(:engine_version), its(:cache_cluster_status), its(:num_cache_nodes), its(:preferred_availability_zone), its(:cache_cluster_create_time), its(:preferred_maintenance_window), its(:notification_configuration), its(:cache_security_groups), its(:cache_subnet_group_name), its(:cache_nodes), its(:auto_minor_version_upgrade), its(:replication_group_id), its(:snapshot_retention_limit), its(:snapshot_window)
681
683
  ## <a name="elasticache_cache_parameter_group">elasticache_cache_parameter_group</a>
682
684
 
683
685
  ElasticacheCacheParameterGroup resource type.
@@ -816,7 +818,7 @@ describe elb('my-elb') do
816
818
  end
817
819
  ```
818
820
 
819
- ### its(:health_check_target), its(:health_check_interval), its(:health_check_timeout), its(:health_check_unhealthy_threshold), its(:health_check_healthy_threshold), its(:load_balancer_name), its(:dns_name), its(:canonical_hosted_zone_name), its(:canonical_hosted_zone_name_id), its(:vpc_id), its(:created_time), its(:scheme)
821
+ ### its(:health_check_target), its(:health_check_interval), its(:health_check_timeout), its(:health_check_unhealthy_threshold), its(:health_check_healthy_threshold), its(:load_balancer_name), its(:dns_name), its(:canonical_hosted_zone_name), its(:canonical_hosted_zone_name_id), its(:backend_server_descriptions), its(:availability_zones), its(:subnets), its(:vpc_id), its(:security_groups), its(:created_time), its(:scheme)
820
822
  ## <a name="iam_group">iam_group</a>
821
823
 
822
824
  IamGroup resource type.
@@ -1214,7 +1216,7 @@ describe launch_configuration('my-lc') do
1214
1216
  end
1215
1217
  ```
1216
1218
 
1217
- ### its(:launch_configuration_name), its(:launch_configuration_arn), its(:image_id), its(:key_name), its(:classic_link_vpc_id), its(:user_data), its(:instance_type), its(:kernel_id), its(:ramdisk_id), its(:spot_price), its(:iam_instance_profile), its(:created_time), its(:ebs_optimized), its(:associate_public_ip_address), its(:placement_tenancy)
1219
+ ### its(:launch_configuration_name), its(:launch_configuration_arn), its(:image_id), its(:key_name), its(:security_groups), its(:classic_link_vpc_id), its(:classic_link_vpc_security_groups), its(:user_data), its(:instance_type), its(:kernel_id), its(:ramdisk_id), its(:block_device_mappings), its(:spot_price), its(:iam_instance_profile), its(:created_time), its(:ebs_optimized), its(:associate_public_ip_address), its(:placement_tenancy)
1218
1220
  ## <a name="nat_gateway">nat_gateway</a>
1219
1221
 
1220
1222
  NatGateway resource type.
@@ -1405,7 +1407,7 @@ describe network_interface('eni-12ab3cde') do
1405
1407
  end
1406
1408
  ```
1407
1409
 
1408
- ### its(:network_interface_id), its(:subnet_id), its(:vpc_id), its(:availability_zone), its(:description), its(:owner_id), its(:requester_id), its(:requester_managed), its(:status), its(:mac_address), its(:private_ip_address), its(:private_dns_name), its(:source_dest_check), its(:association), its(:interface_type)
1410
+ ### its(:network_interface_id), its(:subnet_id), its(:vpc_id), its(:availability_zone), its(:description), its(:owner_id), its(:requester_id), its(:requester_managed), its(:status), its(:mac_address), its(:private_ip_address), its(:private_dns_name), its(:source_dest_check), its(:association), its(:ipv_6_addresses), its(:interface_type)
1409
1411
  ## <a name="rds">rds</a>
1410
1412
 
1411
1413
  RDS resource type.
@@ -1494,7 +1496,7 @@ end
1494
1496
  ```
1495
1497
 
1496
1498
 
1497
- ### its(:vpc_id), its(:db_instance_identifier), its(:db_instance_class), its(:engine), its(:db_instance_status), its(:master_username), its(:db_name), its(:endpoint), its(:allocated_storage), its(:instance_create_time), its(:preferred_backup_window), its(:backup_retention_period), its(:availability_zone), its(:preferred_maintenance_window), its(:pending_modified_values), its(:latest_restorable_time), its(:multi_az), its(:engine_version), its(:auto_minor_version_upgrade), its(:read_replica_source_db_instance_identifier), its(:license_model), its(:iops), its(:character_set_name), its(:secondary_availability_zone), its(:publicly_accessible), its(:storage_type), its(:tde_credential_arn), its(:db_instance_port), its(:db_cluster_identifier), its(:storage_encrypted), its(:kms_key_id), its(:dbi_resource_id), its(:ca_certificate_identifier), its(:copy_tags_to_snapshot), its(:monitoring_interval), its(:enhanced_monitoring_resource_arn), its(:monitoring_role_arn), its(:promotion_tier), its(:db_instance_arn), its(:timezone)
1499
+ ### its(:vpc_id), its(:db_instance_identifier), its(:db_instance_class), its(:engine), its(:db_instance_status), its(:master_username), its(:db_name), its(:endpoint), its(:allocated_storage), its(:instance_create_time), its(:preferred_backup_window), its(:backup_retention_period), its(:db_security_groups), its(:availability_zone), its(:preferred_maintenance_window), its(:pending_modified_values), its(:latest_restorable_time), its(:multi_az), its(:engine_version), its(:auto_minor_version_upgrade), its(:read_replica_source_db_instance_identifier), its(:read_replica_db_instance_identifiers), its(:read_replica_db_cluster_identifiers), its(:license_model), its(:iops), its(:character_set_name), its(:secondary_availability_zone), its(:publicly_accessible), its(:status_infos), its(:storage_type), its(:tde_credential_arn), its(:db_instance_port), its(:db_cluster_identifier), its(:storage_encrypted), its(:kms_key_id), its(:dbi_resource_id), its(:ca_certificate_identifier), its(:domain_memberships), its(:copy_tags_to_snapshot), its(:monitoring_interval), its(:enhanced_monitoring_resource_arn), its(:monitoring_role_arn), its(:promotion_tier), its(:db_instance_arn), its(:timezone)
1498
1500
  ### :unlock: Advanced use
1499
1501
 
1500
1502
  `rds` can use `Aws::RDS::DBInstance` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/RDS/DBInstance.html).
@@ -1630,7 +1632,7 @@ end
1630
1632
  ```
1631
1633
 
1632
1634
 
1633
- ### its(:route_table_id), its(:vpc_id)
1635
+ ### its(:route_table_id), its(:vpc_id), its(:propagating_vgws)
1634
1636
  ### :unlock: Advanced use
1635
1637
 
1636
1638
  `route_table` can use `Aws::EC2::RouteTable` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/RouteTable.html).
@@ -1907,7 +1909,7 @@ end
1907
1909
  ```
1908
1910
 
1909
1911
 
1910
- ### its(:subnet_id), its(:state), its(:vpc_id), its(:cidr_block), its(:assign_ipv_6_address_on_creation), its(:available_ip_address_count), its(:availability_zone), its(:default_for_az), its(:map_public_ip_on_launch)
1912
+ ### its(:subnet_id), its(:state), its(:vpc_id), its(:cidr_block), its(:ipv_6_cidr_block_association_set), its(:assign_ipv_6_address_on_creation), its(:available_ip_address_count), its(:availability_zone), its(:default_for_az), its(:map_public_ip_on_launch)
1911
1913
  ### :unlock: Advanced use
1912
1914
 
1913
1915
  `subnet` can use `Aws::EC2::Subnet` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Subnet.html).
@@ -1977,7 +1979,7 @@ end
1977
1979
  ```
1978
1980
 
1979
1981
 
1980
- ### its(:vpc_id), its(:state), its(:cidr_block), its(:dhcp_options_id), its(:instance_tenancy), its(:is_default)
1982
+ ### its(:vpc_id), its(:state), its(:cidr_block), its(:dhcp_options_id), its(:instance_tenancy), its(:is_default), its(:ipv_6_cidr_block_association_set)
1981
1983
  ### :unlock: Advanced use
1982
1984
 
1983
1985
  `vpc` can use `Aws::EC2::Vpc` resource (see http://docs.aws.amazon.com/sdkforruby/api/Aws/EC2/Vpc.html).
@@ -2113,7 +2115,7 @@ end
2113
2115
  ```
2114
2116
 
2115
2117
 
2116
- ### its(:customer_gateway_id), its(:state), its(:type), its(:ip_address), its(:bgp_asn)
2118
+ ### its(:customer_gateway_id), its(:state), its(:type), its(:ip_address), its(:bgp_asn), its(:tags)
2117
2119
  ## <a name="vpn_gateway">vpn_gateway</a>
2118
2120
 
2119
2121
  VpnGateway resource type.
@@ -2145,7 +2147,7 @@ end
2145
2147
  ```
2146
2148
 
2147
2149
 
2148
- ### its(:vpn_gateway_id), its(:state), its(:type), its(:availability_zone)
2150
+ ### its(:vpn_gateway_id), its(:state), its(:type), its(:availability_zone), its(:vpc_attachments), its(:tags)
2149
2151
  ## <a name="vpn_connection">vpn_connection</a>
2150
2152
 
2151
2153
  VpnConnection resource type.
@@ -2177,7 +2179,7 @@ end
2177
2179
  ```
2178
2180
 
2179
2181
 
2180
- ### its(:vpn_connection_id), its(:state), its(:customer_gateway_configuration), its(:type), its(:customer_gateway_id), its(:vpn_gateway_id), its(:options)
2182
+ ### its(:vpn_connection_id), its(:state), its(:customer_gateway_configuration), its(:type), its(:customer_gateway_id), its(:vpn_gateway_id), its(:tags), its(:vgw_telemetry), its(:options), its(:routes)
2181
2183
  ## <a name="internet_gateway">internet_gateway</a>
2182
2184
 
2183
2185
  InternetGateway resource type.
@@ -2233,3 +2235,236 @@ end
2233
2235
  ### be_pending_validation, be_issued, be_inactive, be_expired, be_validation_timed_out, be_revoked, be_failed
2234
2236
 
2235
2237
  ### its(:certificate_arn), its(:domain_name), its(:subject_alternative_names), its(:domain_validation_options), its(:serial), its(:subject), its(:issuer), its(:created_at), its(:issued_at), its(:imported_at), its(:status), its(:revoked_at), its(:revocation_reason), its(:not_before), its(:not_after), its(:key_algorithm), its(:signature_algorithm), its(:in_use_by), its(:failure_reason), its(:type), its(:renewal_summary)
2238
+ ## <a name="cloudwatch_logs">cloudwatch_logs</a>
2239
+
2240
+ CloudwatchLogs resource type.
2241
+
2242
+ ### exist
2243
+
2244
+ ```ruby
2245
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
2246
+ it { should exist }
2247
+ end
2248
+ ```
2249
+
2250
+
2251
+ ### have_log_stream
2252
+
2253
+ ```ruby
2254
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
2255
+ it { should have_log_stream('my-cloudwatch-logs-stream') }
2256
+ end
2257
+ ```
2258
+
2259
+
2260
+ ### have_metric_filter
2261
+
2262
+ ```ruby
2263
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
2264
+ it { should have_metric_filter('my-cloudwatch-logs-metric-filter') }
2265
+ end
2266
+ ```
2267
+
2268
+
2269
+ ### have_subscription_filter
2270
+
2271
+ ```ruby
2272
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
2273
+ it { should have_subscription_filter('my-cloudwatch-logs-subscription-filter') }
2274
+ end
2275
+ ```
2276
+ or
2277
+ ```ruby
2278
+ describe cloudwatch_logs('my-cloudwatch-logs-group') do
2279
+ it do
2280
+ should have_subscription_filter('my-cloudwatch-logs-subscription-filter')\
2281
+ .filter_pattern('[host, ident, authuser, date, request, status, bytes]')
2282
+ end
2283
+ end
2284
+ ```
2285
+
2286
+ ### its(:log_group_name), its(:creation_time), its(:retention_in_days), its(:metric_filter_count), its(:arn), its(:stored_bytes)
2287
+ # Account and Attributes
2288
+
2289
+ ## <a name="account">account</a>
2290
+
2291
+ Account resource type.
2292
+
2293
+ ```ruby
2294
+ describe account do
2295
+ its(:user_id) { should eq 'AKIAI44QH8DHBEXAMPLE' }
2296
+ its(:account) { should eq '123456789012' }
2297
+ its(:arn) { should eq 'arn:aws:iam::123456789012:user/Alice' }
2298
+ its('ec2.supported_platforms') { should eq ["EC2", "VPC"] }
2299
+ its('ec2.vpc_max_security_groups_per_interface') { should eq 5 }
2300
+ its('ec2.max_elastic_ips') { should eq 5 }
2301
+ its('ec2.max_instances') { should eq 20 }
2302
+ its('ec2.vpc_max_elastic_ips') { should eq 5 }
2303
+ its('ec2.default_vpc') { should eq 'none' }
2304
+ its('rds.DBInstances.used') { should eq 0 }
2305
+ its('rds.DBInstances.max') { should eq 40 }
2306
+ its('rds.ReservedDBInstances.used') { should eq 0 }
2307
+ its('rds.ReservedDBInstances.max') { should eq 40 }
2308
+ its('rds.AllocatedStorage.used') { should eq 0 }
2309
+ its('rds.AllocatedStorage.max') { should eq 100000 }
2310
+ its('rds.DBSecurityGroups.used') { should eq 0 }
2311
+ its('rds.DBSecurityGroups.max') { should eq 25 }
2312
+ its('rds.AuthorizationsPerDBSecurityGroup.used') { should eq 0 }
2313
+ its('rds.AuthorizationsPerDBSecurityGroup.max') { should eq 20 }
2314
+ its('rds.DBParameterGroups.used') { should eq 1 }
2315
+ its('rds.DBParameterGroups.max') { should eq 50 }
2316
+ its('rds.ManualSnapshots.used') { should eq 0 }
2317
+ its('rds.ManualSnapshots.max') { should eq 100 }
2318
+ its('rds.EventSubscriptions.used') { should eq 0 }
2319
+ its('rds.EventSubscriptions.max') { should eq 20 }
2320
+ its('rds.DBSubnetGroups.used') { should eq 1 }
2321
+ its('rds.DBSubnetGroups.max') { should eq 50 }
2322
+ its('rds.OptionGroups.used') { should eq 0 }
2323
+ its('rds.OptionGroups.max') { should eq 20 }
2324
+ its('rds.SubnetsPerDBSubnetGroup.used') { should eq 2 }
2325
+ its('rds.SubnetsPerDBSubnetGroup.max') { should eq 20 }
2326
+ its('rds.ReadReplicasPerMaster.used') { should eq 0 }
2327
+ its('rds.ReadReplicasPerMaster.max') { should eq 5 }
2328
+ its('rds.DBClusters.used') { should eq 0 }
2329
+ its('rds.DBClusters.max') { should eq 40 }
2330
+ its('rds.DBClusterParameterGroups.used') { should eq 0 }
2331
+ its('rds.DBClusterParameterGroups.max') { should eq 50 }
2332
+ its('rds.DBClusterRoles.used') { should eq 0 }
2333
+ its('rds.DBClusterRoles.max') { should eq 5 }
2334
+ its('lambda.total_code_size.limit') { should eq 80530636800 }
2335
+ its('lambda.total_code_size.usage') { should eq 2034651562 }
2336
+ its('lambda.code_size_unzipped.limit') { should eq 262144000 }
2337
+ its('lambda.code_size_zipped.limit') { should eq 52428800 }
2338
+ its('lambda.concurrent_executions.limit') { should eq 200 }
2339
+ its('lambda.function_count.usage') { should eq 8 }
2340
+ its('ses.max_24_hour_send') { should eq 200.0 }
2341
+ its('ses.max_send_rate') { should eq 1.0 }
2342
+ its('ses.sent_last_24_hours') { should eq 1.0 }
2343
+ end
2344
+ ```
2345
+
2346
+
2347
+ ## :unlock: Another way: Test with account_attribute type
2348
+
2349
+ ## <a name="account_attribute">account_attribute</a>
2350
+
2351
+ Account Attribute resource type.
2352
+
2353
+ ```ruby
2354
+ describe account_attribute('ec2') do
2355
+ its('supported_platforms') { should eq ["EC2", "VPC"] }
2356
+ its('vpc_max_security_groups_per_interface') { should eq 5 }
2357
+ its('max_elastic_ips') { should eq 5 }
2358
+ its('max_instances') { should eq 20 }
2359
+ its('vpc_max_elastic_ips') { should eq 5 }
2360
+ its('default_vpc') { should eq 'none' }
2361
+ end
2362
+
2363
+ describe account_attribute('rds') do
2364
+ its('DBInstances.used') { should eq 0 }
2365
+ its('DBInstances.max') { should eq 40 }
2366
+ its('ReservedDBInstances.used') { should eq 0 }
2367
+ its('ReservedDBInstances.max') { should eq 40 }
2368
+ its('AllocatedStorage.used') { should eq 0 }
2369
+ its('AllocatedStorage.max') { should eq 100000 }
2370
+ its('DBSecurityGroups.used') { should eq 0 }
2371
+ its('DBSecurityGroups.max') { should eq 25 }
2372
+ its('AuthorizationsPerDBSecurityGroup.used') { should eq 0 }
2373
+ its('AuthorizationsPerDBSecurityGroup.max') { should eq 20 }
2374
+ its('DBParameterGroups.used') { should eq 1 }
2375
+ its('DBParameterGroups.max') { should eq 50 }
2376
+ its('ManualSnapshots.used') { should eq 0 }
2377
+ its('ManualSnapshots.max') { should eq 100 }
2378
+ its('EventSubscriptions.used') { should eq 0 }
2379
+ its('EventSubscriptions.max') { should eq 20 }
2380
+ its('DBSubnetGroups.used') { should eq 1 }
2381
+ its('DBSubnetGroups.max') { should eq 50 }
2382
+ its('OptionGroups.used') { should eq 0 }
2383
+ its('OptionGroups.max') { should eq 20 }
2384
+ its('SubnetsPerDBSubnetGroup.used') { should eq 2 }
2385
+ its('SubnetsPerDBSubnetGroup.max') { should eq 20 }
2386
+ its('ReadReplicasPerMaster.used') { should eq 0 }
2387
+ its('ReadReplicasPerMaster.max') { should eq 5 }
2388
+ its('DBClusters.used') { should eq 0 }
2389
+ its('DBClusters.max') { should eq 40 }
2390
+ its('DBClusterParameterGroups.used') { should eq 0 }
2391
+ its('DBClusterParameterGroups.max') { should eq 50 }
2392
+ its('DBClusterRoles.used') { should eq 0 }
2393
+ its('DBClusterRoles.max') { should eq 5 }
2394
+ end
2395
+
2396
+ describe account_attribute('lambda') do
2397
+ its('total_code_size.limit') { should eq 80530636800 }
2398
+ its('total_code_size.usage') { should eq 2034651562 }
2399
+ its('code_size_unzipped.limit') { should eq 262144000 }
2400
+ its('code_size_zipped.limit') { should eq 52428800 }
2401
+ its('concurrent_executions.limit') { should eq 200 }
2402
+ its('function_count.usage') { should eq 8 }
2403
+ end
2404
+
2405
+ describe account_attribute('ses') do
2406
+ its('max_24_hour_send') { should eq 200.0 }
2407
+ its('max_send_rate') { should eq 1.0 }
2408
+ its('sent_last_24_hours') { should eq 1.0 }
2409
+ end
2410
+
2411
+ ```
2412
+
2413
+
2414
+ ## :unlock: Another way: Test with separated resource types
2415
+
2416
+ [ec2_account_attributes](#ec2_account_attributes)
2417
+ | [rds_account_attributes](#rds_account_attributes)
2418
+ | [lambda_account_settings](#lambda_account_settings)
2419
+ | [ses_send_quota](#ses_send_quota)
2420
+ ## <a name="ec2_account_attributes">ec2_account_attributes</a>
2421
+
2422
+ Ec2AccountAttributes account attributes.
2423
+
2424
+ ```ruby
2425
+ describe ec2_account_attributes do
2426
+ its(:supported_platforms) { should include 'VPC' }
2427
+ its(:max_instances) { should eq 20 }
2428
+ end
2429
+ ```
2430
+
2431
+ ### its(:supported_platforms), its(:vpc_max_security_groups_per_interface), its(:max_elastic_ips), its(:max_instances), its(:vpc_max_elastic_ips), its(:default_vpc)
2432
+ ## <a name="rds_account_attributes">rds_account_attributes</a>
2433
+
2434
+ RdsAccountAttributes account attributes.
2435
+
2436
+ ```ruby
2437
+ describe rds_account_attributes do
2438
+ its('DBInstances.used') { should eq 0 }
2439
+ its('DBInstances.max') { should eq 40 }
2440
+ end
2441
+ ```
2442
+
2443
+
2444
+ ## <a name="lambda_account_settings">lambda_account_settings</a>
2445
+
2446
+ LambdaAccountSettings account attributes.
2447
+
2448
+ ```ruby
2449
+ describe lambda_account_settings do
2450
+ its('total_code_size.limit') { should eq 80_530_636_800 }
2451
+ its('total_code_size.usage') { should eq 2_034_651_562 }
2452
+ its('function_count.usage') { should eq 8 }
2453
+ end
2454
+ ```
2455
+
2456
+
2457
+
2458
+ ## <a name="ses_send_quota">ses_send_quota</a>
2459
+
2460
+ SesSendQuota account attributes.
2461
+
2462
+ ```ruby
2463
+ describe ses_send_quota do
2464
+ its(:max_24_hour_send) { should eq 200.0 }
2465
+ its(:max_send_rate) { should eq 1.0 }
2466
+ its(:sent_last_24_hours) { should eq 1.0 }
2467
+ end
2468
+ ```
2469
+
2470
+ ### its(:max_24_hour_send), its(:max_send_rate), its(:sent_last_24_hours)