diff --git a/.github/workflows/rspec.yaml b/.github/workflows/rspec.yaml new file mode 100644 index 0000000..d0a2ef8 --- /dev/null +++ b/.github/workflows/rspec.yaml @@ -0,0 +1,8 @@ +name: cftest + +on: [push, pull_request] + +jobs: + rspec: + uses: theonestack/shared-workflows/.github/workflows/rspec.yaml@main + secrets: inherit \ No newline at end of file diff --git a/spec/cache-cluster_spec.rb b/spec/cache-cluster_spec.rb new file mode 100644 index 0000000..f75d4ab --- /dev/null +++ b/spec/cache-cluster_spec.rb @@ -0,0 +1,41 @@ +require 'yaml' + +describe 'should be valid' do + + context 'cftest' do + it 'compiles test' do + expect(system("cfhighlander cftest --tests tests/cache-cluster.test.yaml")).to be_truthy + end + end + + let(:template) { YAML.load_file("#{File.dirname(__FILE__)}/../out/tests/cache-cluster/redis.compiled.yaml") } + + context 'Resource ReplicationGroupRedis' do + + let(:properties) { template["Resources"]["ReplicationGroupRedis"]["Properties"] } + + it 'has property' do + expect(properties).to eq({ + "AtRestEncryptionEnabled" => true, + "AutoMinorVersionUpgrade" => true, + "AutomaticFailoverEnabled" => true, + "CacheNodeType" => {"Ref"=>"InstanceType"}, + "CacheParameterGroupName" => {"Ref"=>"ParameterGroupRedis"}, + "CacheSubnetGroupName" => {"Ref"=>"SubnetGroupRedis"}, + "Engine" => "redis", + "NumCacheClusters" => {"Ref"=>"NumCacheClusters"}, + "ReplicationGroupDescription" => {"Fn::Sub"=>"${EnvironmentName}-redis"}, + "SecurityGroupIds" => [{"Ref"=>"SecurityGroupRedis"}], + "SnapshotRetentionLimit" => {"Ref"=>"SnapshotRetentionLimit"}, + "Tags" => [ + {"Key"=>"Name", "Value"=>{"Fn::Sub"=>"${EnvironmentName}-redis"}}, + {"Key"=>"Environment", "Value"=>{"Ref"=>"EnvironmentName"}}, + {"Key"=>"EnvironmentType", "Value"=>{"Ref"=>"EnvironmentType"}} + ], + "TransitEncryptionEnabled" => true, + }) + end + + end + +end \ No newline at end of file diff --git a/spec/clustered_spec.rb b/spec/clustered_spec.rb new file mode 100644 index 0000000..eba68b5 --- /dev/null +++ b/spec/clustered_spec.rb @@ -0,0 +1,45 @@ +require 'yaml' + +describe 'should be valid' do + + context 'cftest' do + it 'compiles test' do + expect(system("cfhighlander cftest --tests tests/clustered.test.yaml")).to be_truthy + end + end + + let(:template) { YAML.load_file("#{File.dirname(__FILE__)}/../out/tests/clustered/redis.compiled.yaml") } + + context 'Resource ReplicationGroupRedis' do + + let(:properties) { template["Resources"]["ReplicationGroupRedis"]["Properties"] } + + it 'has property' do + expect(properties).to eq({ + "AtRestEncryptionEnabled" => true, + "AutoMinorVersionUpgrade" => true, + "AutomaticFailoverEnabled" => true, + "CacheNodeType" => {"Ref"=>"InstanceType"}, + "CacheParameterGroupName" => {"Ref"=>"ParameterGroupRedis"}, + "CacheSubnetGroupName" => {"Ref"=>"SubnetGroupRedis"}, + "Engine" => "redis", + "NumNodeGroups" => {"Ref"=>"NumNodeGroups"}, + "Port" => 1234, + "PreferredMaintenanceWindow" => "sun:03:25-sun:05:30", + "ReplicasPerNodeGroup" => {"Ref"=>"ReplicasPerNodeGroup"}, + "ReplicationGroupDescription" => {"Fn::Sub"=>"${EnvironmentName}-redis"}, + "SecurityGroupIds" => [{"Ref"=>"SecurityGroupRedis"}], + "SnapshotRetentionLimit" => {"Ref"=>"SnapshotRetentionLimit"}, + "SnapshotWindow" => "00:30-02:30", + "Tags" => [ + {"Key"=>"Name", "Value"=>{"Fn::Sub"=>"${EnvironmentName}-redis"}}, + {"Key"=>"Environment", "Value"=>{"Ref"=>"EnvironmentName"}}, + {"Key"=>"EnvironmentType", "Value"=>{"Ref"=>"EnvironmentType"}} + ], + "TransitEncryptionEnabled" => true, + }) + end + + end + +end \ No newline at end of file diff --git a/spec/default_spec.rb b/spec/default_spec.rb new file mode 100644 index 0000000..cf00917 --- /dev/null +++ b/spec/default_spec.rb @@ -0,0 +1,42 @@ +require 'yaml' + +describe 'should be valid' do + + context 'cftest' do + it 'compiles test' do + expect(system("cfhighlander cftest --tests tests/default.test.yaml")).to be_truthy + end + end + + let(:template) { YAML.load_file("#{File.dirname(__FILE__)}/../out/tests/default/redis.compiled.yaml") } + + context 'Resource ReplicationGroupRedis' do + + let(:properties) { template["Resources"]["ReplicationGroupRedis"]["Properties"] } + + it 'has property' do + expect(properties).to eq({ + "AtRestEncryptionEnabled" => true, + "AutoMinorVersionUpgrade" => true, + "AutomaticFailoverEnabled" => true, + "CacheNodeType" => {"Ref"=>"InstanceType"}, + "CacheParameterGroupName" => {"Ref"=>"ParameterGroupRedis"}, + "CacheSubnetGroupName" => {"Ref"=>"SubnetGroupRedis"}, + "Engine" => "redis", + "NumNodeGroups" => {"Ref"=>"NumNodeGroups"}, + "ReplicasPerNodeGroup" => {"Ref"=>"ReplicasPerNodeGroup"}, + "ReplicationGroupDescription" => {"Fn::Sub"=>"${EnvironmentName}-redis"}, + "SecurityGroupIds" => [{"Ref"=>"SecurityGroupRedis"}], + "SnapshotRetentionLimit" => {"Ref"=>"SnapshotRetentionLimit"}, + "Tags" => [ + {"Key"=>"Name", "Value"=>{"Fn::Sub"=>"${EnvironmentName}-redis"}}, + {"Key"=>"Environment", "Value"=>{"Ref"=>"EnvironmentName"}}, + {"Key"=>"EnvironmentType", "Value"=>{"Ref"=>"EnvironmentType"}} + ], + "TransitEncryptionEnabled" => true, + }) + end + + end + +end \ No newline at end of file diff --git a/spec/node-group_spec.rb b/spec/node-group_spec.rb new file mode 100644 index 0000000..7afd09b --- /dev/null +++ b/spec/node-group_spec.rb @@ -0,0 +1,42 @@ +require 'yaml' + +describe 'should be valid' do + + context 'cftest' do + it 'compiles test' do + expect(system("cfhighlander cftest --tests tests/node-group.test.yaml")).to be_truthy + end + end + + let(:template) { YAML.load_file("#{File.dirname(__FILE__)}/../out/tests/node-group/redis.compiled.yaml") } + + context 'Resource ReplicationGroupRedis' do + + let(:properties) { template["Resources"]["ReplicationGroupRedis"]["Properties"] } + + it 'has property' do + expect(properties).to eq({ + "AtRestEncryptionEnabled" => true, + "AutoMinorVersionUpgrade" => true, + "AutomaticFailoverEnabled" => true, + "CacheNodeType" => {"Ref"=>"InstanceType"}, + "CacheParameterGroupName" => {"Ref"=>"ParameterGroupRedis"}, + "CacheSubnetGroupName" => {"Ref"=>"SubnetGroupRedis"}, + "Engine" => "redis", + "NumNodeGroups" => {"Ref"=>"NumNodeGroups"}, + "ReplicasPerNodeGroup" => {"Ref"=>"ReplicasPerNodeGroup"}, + "ReplicationGroupDescription" => {"Fn::Sub"=>"${EnvironmentName}-redis"}, + "SecurityGroupIds" => [{"Ref"=>"SecurityGroupRedis"}], + "SnapshotRetentionLimit" => {"Ref"=>"SnapshotRetentionLimit"}, + "Tags" => [ + {"Key"=>"Name", "Value"=>{"Fn::Sub"=>"${EnvironmentName}-redis"}}, + {"Key"=>"Environment", "Value"=>{"Ref"=>"EnvironmentName"}}, + {"Key"=>"EnvironmentType", "Value"=>{"Ref"=>"EnvironmentType"}} + ], + "TransitEncryptionEnabled" => true, + }) + end + + end + +end \ No newline at end of file diff --git a/spec/non-clustered_spec.rb b/spec/non-clustered_spec.rb new file mode 100644 index 0000000..a6e694b --- /dev/null +++ b/spec/non-clustered_spec.rb @@ -0,0 +1,42 @@ +require 'yaml' + +describe 'should be valid' do + + context 'cftest' do + it 'compiles test' do + expect(system("cfhighlander cftest --tests tests/non-clustered.test.yaml")).to be_truthy + end + end + + let(:template) { YAML.load_file("#{File.dirname(__FILE__)}/../out/tests/non-clustered/redis.compiled.yaml") } + + context 'Resource ReplicationGroupRedis' do + + let(:properties) { template["Resources"]["ReplicationGroupRedis"]["Properties"] } + + it 'has property' do + expect(properties).to eq({ + "AtRestEncryptionEnabled" => true, + "AutoMinorVersionUpgrade" => true, + "AutomaticFailoverEnabled" => false, + "CacheNodeType" => {"Ref"=>"InstanceType"}, + "CacheParameterGroupName" => {"Ref"=>"ParameterGroupRedis"}, + "CacheSubnetGroupName" => {"Ref"=>"SubnetGroupRedis"}, + "Engine" => "redis", + "NumNodeGroups" => {"Ref"=>"NumNodeGroups"}, + "ReplicasPerNodeGroup" => {"Ref"=>"ReplicasPerNodeGroup"}, + "ReplicationGroupDescription" => {"Fn::Sub"=>"${EnvironmentName}-redis"}, + "SecurityGroupIds" => [{"Ref"=>"SecurityGroupRedis"}], + "SnapshotRetentionLimit" => {"Ref"=>"SnapshotRetentionLimit"}, + "Tags" => [ + {"Key"=>"Name", "Value"=>{"Fn::Sub"=>"${EnvironmentName}-redis"}}, + {"Key"=>"Environment", "Value"=>{"Ref"=>"EnvironmentName"}}, + {"Key"=>"EnvironmentType", "Value"=>{"Ref"=>"EnvironmentType"}} + ], + "TransitEncryptionEnabled" => true, + }) + end + + end + +end \ No newline at end of file diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..0d085d1 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,96 @@ +# This file was generated by the `rspec --init` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + + config.before(:context) { @validate = ENV['TRAVIS_PULL_REQUEST'] ? '--no-validate' : '--validate' } + + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + # This setting enables warnings. It's recommended, but in some cases may + # be too noisy due to issues in dependencies. + config.warnings = true + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = "doc" + end + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end \ No newline at end of file diff --git a/tests/cache-custer.test.yaml b/tests/cache-cluster.test.yaml similarity index 100% rename from tests/cache-custer.test.yaml rename to tests/cache-cluster.test.yaml