File: instance_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 (149 lines) | stat: -rw-r--r-- 6,419 bytes parent folder | download
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
Shindo.tests('AWS::RDS | instance requests', ['aws', 'rds']) do

  # random_differentiator
  # Useful when rapidly re-running tests, so we don't have to wait
  # several minutes for deleted servers to disappear
  suffix = rand(65536).to_s(16)

  @db_instance_id         = "fog-test-#{suffix}"
  @db_replica_id          = "fog-replica-#{suffix}"
  @db_snapshot_id         = "fog-snapshot-#{suffix}"
  @db_final_snapshot_id   = "fog-final-snapshot-#{suffix}"
  @db_instance_restore_id = "fog-test-#{suffix}"

  tests('success') do

    tests("#create_db_instance").formats(AWS::RDS::Formats::CREATE_DB_INSTANCE) do
      default_params = rds_default_server_params

      # creation of replicas requires a > 0 BackupRetentionPeriod value
      # InvalidDBInstanceState => Automated backups are not enabled for this database instance. To enable automated backups, use ModifyDBInstance to set the backup retention period to a non-zero value. (Fog::AWS::RDS::Error)
      backup_retention_period = 1

      result = Fog::AWS[:rds].create_db_instance(@db_instance_id,
                                                 'AllocatedStorage'      => default_params.fetch(:allocated_storage),
                                                 'DBInstanceClass'       => default_params.fetch(:flavor_id),
                                                 'Engine'                => default_params.fetch(:engine),
                                                 'EngineVersion'         => default_params.fetch(:version),
                                                 'MasterUsername'        => default_params.fetch(:master_username),
                                                 'BackupRetentionPeriod' => backup_retention_period,
                                                 'MasterUserPassword'    => default_params.fetch(:password)).body

      instance = result['CreateDBInstanceResult']['DBInstance']
      returns('creating') { instance['DBInstanceStatus'] }
      result
    end

    tests("#describe_db_instances").formats(AWS::RDS::Formats::DESCRIBE_DB_INSTANCES) do
      Fog::AWS[:rds].describe_db_instances.body
    end

    server = Fog::AWS[:rds].servers.get(@db_instance_id)
    server.wait_for { ready? }

    new_storage = 6
    tests("#modify_db_instance with immediate apply").formats(AWS::RDS::Formats::MODIFY_DB_INSTANCE) do
      body = Fog::AWS[:rds].modify_db_instance(@db_instance_id, true, 'AllocatedStorage' => new_storage).body
      tests 'pending storage' do
        instance = body['ModifyDBInstanceResult']['DBInstance']
        returns(new_storage) { instance['PendingModifiedValues']['AllocatedStorage'] }
      end
      body
    end

    server.wait_for { state == 'modifying' }
    server.wait_for { state == 'available' }

    tests 'new storage' do
      returns(new_storage) { server.allocated_storage }
    end

    tests("reboot db instance") do
      tests("#reboot").formats(AWS::RDS::Formats::REBOOT_DB_INSTANCE) do
        Fog::AWS[:rds].reboot_db_instance(@db_instance_id).body
      end
    end

    server.wait_for { state == 'rebooting' }
    server.wait_for { state == 'available' }

    tests("#create_db_snapshot").formats(AWS::RDS::Formats::CREATE_DB_SNAPSHOT) do
      body = Fog::AWS[:rds].create_db_snapshot(@db_instance_id, @db_snapshot_id).body
      returns('creating') { body['CreateDBSnapshotResult']['DBSnapshot']['Status'] }
      body
    end

    tests("#describe_db_snapshots").formats(AWS::RDS::Formats::DESCRIBE_DB_SNAPSHOTS) do
      Fog::AWS[:rds].describe_db_snapshots.body
    end

    server.wait_for { state == 'available' }

    tests("#create read replica").formats(AWS::RDS::Formats::CREATE_READ_REPLICA) do
      Fog::AWS[:rds].create_db_instance_read_replica(@db_replica_id, @db_instance_id).body
    end

    replica = Fog::AWS[:rds].servers.get(@db_replica_id)
    replica.wait_for { ready? }

    tests("replica source") do
      returns(@db_instance_id) { replica.read_replica_source }
    end
    server.reload

    tests("replica identifiers") do
      returns([@db_replica_id]) { server.read_replica_identifiers }
    end

    tests("#promote read replica").formats(AWS::RDS::Formats::PROMOTE_READ_REPLICA) do
      Fog::AWS[:rds].promote_read_replica(@db_replica_id).body
    end

    tests("#delete_db_instance").formats(AWS::RDS::Formats::DELETE_DB_INSTANCE) do
      #server.wait_for { state == 'available' }
      Fog::AWS[:rds].delete_db_instance(@db_replica_id, nil, true)
      body = Fog::AWS[:rds].delete_db_instance(@db_instance_id, @db_final_snapshot_id).body

      tests "final snapshot" do
        returns('creating') { Fog::AWS[:rds].describe_db_snapshots(:snapshot_id => @db_final_snapshot_id).body['DescribeDBSnapshotsResult']['DBSnapshots'].first['Status'] }
      end
      body
    end

    tests("#restore_db_instance_from_db_snapshot").formats(AWS::RDS::Formats::RESTORE_DB_INSTANCE_FROM_DB_SNAPSHOT) do
      snapshot = Fog::AWS[:rds].snapshots.get(@db_final_snapshot_id)
      snapshot.wait_for { state == 'available' }
      result = Fog::AWS[:rds].restore_db_instance_from_db_snapshot(@db_final_snapshot_id, @db_instance_restore_id).body
      instance = result['RestoreDBInstanceFromDBSnapshotResult']['DBInstance']
      returns('creating') { instance['DBInstanceStatus'] }
      result
    end
    restore_server = Fog::AWS[:rds].servers.get(@db_instance_restore_id)
    restore_server.wait_for { state == 'available' }

    tests("#delete_db_snapshot").formats(AWS::RDS::Formats::DELETE_DB_SNAPSHOT) do
      Fog::AWS[:rds].snapshots.get(@db_snapshot_id).wait_for { ready? }
      Fog::AWS[:rds].delete_db_snapshot(@db_snapshot_id).body
    end

    tests("snapshot.destroy") do
      snapshot = Fog::AWS[:rds].snapshots.get(@db_final_snapshot_id)
      snapshot.wait_for { ready? }
      snapshot.destroy
      returns(nil) { Fog::AWS[:rds].snapshots.get(@db_final_snapshot_id) }
    end

  end

  tests('failure') do
    tests "deleting nonexisting instance" do
      raises(Fog::AWS::RDS::NotFound) { Fog::AWS[:rds].delete_db_instance('doesnexist', 'irrelevant') }
    end
    tests "deleting non existing snapshot" do
      raises(Fog::AWS::RDS::NotFound) { Fog::AWS[:rds].delete_db_snapshot('doesntexist') }
    end
    tests "modifying non existing instance" do
      raises(Fog::AWS::RDS::NotFound) { Fog::AWS[:rds].modify_db_instance 'doesntexit', true, 'AllocatedStorage' => 10 }
    end
  end
end