File: notification_configuration_tests.rb

package info (click to toggle)
ruby-fog-aws 3.33.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 8,180 kB
  • sloc: ruby: 75,405; javascript: 14; makefile: 9; sh: 4
file content (124 lines) | stat: -rw-r--r-- 5,514 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Shindo.tests('AWS::AutoScaling | notification configuration requests', ['aws', 'auto_scaling']) do

  image_id = {  # Ubuntu 12.04 LTS 64-bit EBS
    'ap-northeast-1' => 'ami-60c77761',
    'ap-southeast-1' => 'ami-a4ca8df6',
    'ap-southeast-2' => 'ami-fb8611c1',
    'eu-west-1'      => 'ami-e1e8d395',
    'sa-east-1'      => 'ami-8cd80691',
    'us-east-1'      => 'ami-a29943cb',
    'us-west-1'      => 'ami-87712ac2',
    'us-west-2'      => 'ami-20800c10'
  }

  now = Time.now.utc.to_i
  lc_name = "fog-test-#{now}"
  asg_name = "fog-test-#{now}"

  topic_name = "fog-test-#{now}"
  begin
    topic = Fog::AWS[:sns].create_topic(topic_name).body
    topic_arn = topic['TopicArn']
  rescue Fog::Errors::MockNotImplemented
    topic_arn = Fog::AWS::Mock.arn('sns', Fog::AWS[:auto_scaling].data[:owner_id], "fog-test-#{now}", Fog::AWS[:auto_scaling].region)
  end

  lc = Fog::AWS[:auto_scaling].create_launch_configuration(image_id[Fog::AWS[:auto_scaling].region], 't1.micro', lc_name)
  asg = Fog::AWS[:auto_scaling].create_auto_scaling_group(asg_name, "#{Fog::AWS[:auto_scaling].region}a", lc_name, 0, 0)

  tests('raises') do
    tests("#put_notification_configuration(non-existent-group)").raises(Fog::AWS::AutoScaling::ValidationError) do
      Fog::AWS[:auto_scaling].put_notification_configuration('fog-test-nonexistent-group', 'autoscaling:TEST_NOTIFICATION', topic_arn)
    end

    tests("#put_notification_configuration(null-types)").raises(Fog::AWS::AutoScaling::ValidationError) do
      Fog::AWS[:auto_scaling].put_notification_configuration(asg_name, [], topic_arn)
    end
  end

  tests('success') do
    tests("#put_notification_configuration(string)").formats(AWS::AutoScaling::Formats::BASIC) do
      pending if Fog.mocking?
      Fog::AWS[:auto_scaling].put_notification_configuration(asg_name, 'autoscaling:TEST_NOTIFICATION', topic_arn).body
    end

    tests("#describe_notification_configurations").formats(AWS::AutoScaling::Formats::DESCRIBE_NOTIFICATION_CONFIGURATIONS) do
      pending if Fog.mocking?
      body = Fog::AWS[:auto_scaling].describe_notification_configurations('AutoScalingGroupNames' => asg_name).body
      notification_configurations = body['DescribeNotificationConfigurationsResult']['NotificationConfigurations']
      returns(true, 'exactly 1 configurations') do
        notification_configurations.size == 1
      end
      returns(true) do
        config = notification_configurations.first
        config['AutoScalingGroupName'] == asg_name && config['TopicARN'] == topic_arn && config['NotificationType'] == 'autoscaling:TEST_NOTIFICATION'
      end
      body
    end

    tests("#put_notification_configuration(array)").formats(AWS::AutoScaling::Formats::BASIC) do
      pending if Fog.mocking?
      Fog::AWS[:auto_scaling].put_notification_configuration(asg_name, ['autoscaling:EC2_INSTANCE_LAUNCH', 'autoscaling:EC2_INSTANCE_TERMINATE'], topic_arn).body
    end

    tests("#describe_notification_configurations").formats(AWS::AutoScaling::Formats::DESCRIBE_NOTIFICATION_CONFIGURATIONS) do
      pending if Fog.mocking?
      body = Fog::AWS[:auto_scaling].describe_notification_configurations('AutoScalingGroupName' => asg_name).body
      notification_configurations = body['DescribeNotificationConfigurationsResult']['NotificationConfigurations']
      returns(true, 'exactly 2 configurations') do
        notification_configurations.size == 2
      end
      [ 'autoscaling:EC2_INSTANCE_LAUNCH', 'autoscaling:EC2_INSTANCE_TERMINATE'].each do |type|
        returns(true) do
          notification_configurations.any? do |config|
            config['AutoScalingGroupName'] == asg_name && config['TopicARN'] == topic_arn && config['NotificationType'] == type
          end
        end
      end
      body
    end

    tests("#describe_notification_configurations(all)").formats(AWS::AutoScaling::Formats::DESCRIBE_NOTIFICATION_CONFIGURATIONS) do
      pending if Fog.mocking?
      body = Fog::AWS[:auto_scaling].describe_notification_configurations().body
      notification_configurations = body['DescribeNotificationConfigurationsResult']['NotificationConfigurations']
      returns(true, 'at least 2 configurations') do
        notification_configurations.size >= 2
      end
      [ 'autoscaling:EC2_INSTANCE_LAUNCH', 'autoscaling:EC2_INSTANCE_TERMINATE'].each do |type|
        returns(true) do
          notification_configurations.any? do |config|
            config['AutoScalingGroupName'] == asg_name && config['TopicARN'] == topic_arn && config['NotificationType'] == type
          end
        end
      end

      body
    end

    tests("#delete_notification_configuration").formats(AWS::AutoScaling::Formats::BASIC) do
      pending if Fog.mocking?
      Fog::AWS[:auto_scaling].delete_notification_configuration(asg_name, topic_arn).body
    end

    tests("#describe_notification_configurations").formats(AWS::AutoScaling::Formats::DESCRIBE_NOTIFICATION_CONFIGURATIONS) do
      pending if Fog.mocking?
      body = Fog::AWS[:auto_scaling].describe_notification_configurations('AutoScalingGroupNames' => asg_name).body
      returns(true) do
        body['DescribeNotificationConfigurationsResult']['NotificationConfigurations'].empty?
      end
      body
    end
  end

  Fog::AWS[:auto_scaling].delete_auto_scaling_group(asg_name)
  Fog::AWS[:auto_scaling].delete_launch_configuration(lc_name)

  if topic
    begin
      Fog::AWS[:sns].delete_topic(topic_arn)
    rescue Fog::Errors::MockNotImplemented
    end
  end

end