ultravault 1.0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. data/.gitignore +15 -0
  2. data/Gemfile +2 -0
  3. data/README.md +88 -0
  4. data/Rakefile +17 -0
  5. data/lib/ultravault.rb +17 -0
  6. data/lib/ultravault/api_request.rb +26 -0
  7. data/lib/ultravault/client.rb +19 -0
  8. data/lib/ultravault/config.rb +55 -0
  9. data/lib/ultravault/data_objects/agent.rb +104 -0
  10. data/lib/ultravault/data_objects/disk_safe.rb +64 -0
  11. data/lib/ultravault/data_objects/recovery_point.rb +24 -0
  12. data/lib/ultravault/soap_service.rb +29 -0
  13. data/lib/ultravault/soap_service/agent_service.rb +62 -0
  14. data/lib/ultravault/soap_service/disk_safe_service.rb +18 -0
  15. data/lib/ultravault/soap_service/recovery_point_service.rb +21 -0
  16. data/test/all.rb +6 -0
  17. data/test/integration/client_code.rb +88 -0
  18. data/test/support/fixtures.rb +4 -0
  19. data/test/support/fixtures/agent_service.rb +56 -0
  20. data/test/support/fixtures/disk_safe.rb +35 -0
  21. data/test/support/fixtures/disk_safe_service.rb +60 -0
  22. data/test/support/fixtures/recovery_point_service.rb +26 -0
  23. data/test/test_helper.rb +35 -0
  24. data/test/unit/lib/ultravault/data_objects/test_agent.rb +133 -0
  25. data/test/unit/lib/ultravault/data_objects/test_disk_safe.rb +150 -0
  26. data/test/unit/lib/ultravault/data_objects/test_recovery_point.rb +59 -0
  27. data/test/unit/lib/ultravault/soap_service/test_agent_service.rb +139 -0
  28. data/test/unit/lib/ultravault/soap_service/test_disk_safe_service.rb +40 -0
  29. data/test/unit/lib/ultravault/soap_service/test_recovery_point_service.rb +39 -0
  30. data/test/unit/lib/ultravault/test_api_request.rb +36 -0
  31. data/test/unit/lib/ultravault/test_client.rb +47 -0
  32. data/test/unit/lib/ultravault/test_config.rb +37 -0
  33. data/test/unit/lib/ultravault/test_soap_service.rb +41 -0
  34. data/test/vcr_cassettes/agent_by_id.yml +41 -0
  35. data/test/vcr_cassettes/all_agents.yml +118 -0
  36. data/test/vcr_cassettes/create_mod_rm_agents.yml +158 -0
  37. data/ultravault.gemspec +25 -0
  38. metadata +212 -0
@@ -0,0 +1,29 @@
1
+ module UltraVault
2
+
3
+ # @private
4
+ class SoapService
5
+ attr_reader :client
6
+
7
+ def initialize(service)
8
+ api_request = UltraVault::ApiRequest.new( host: UltraVault.config.host,
9
+ port: UltraVault.config.port,
10
+ service: service,
11
+ api_verison: UltraVault.config.api_version,
12
+ ssl: UltraVault.config.ssl)
13
+ @client = UltraVault::Client.new( endpoint: api_request.endpoint,
14
+ namespace: api_request.namespace,
15
+ username: UltraVault.config.username,
16
+ password: UltraVault.config.password)
17
+ end
18
+
19
+ def extract_params(response_hash, type)
20
+ return response_hash[type][:return] if response_hash[type]
21
+ nil
22
+ end
23
+
24
+ def extract_params_array(response_hash, type)
25
+ [extract_params(response_hash,type)].flatten.compact
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,62 @@
1
+ module UltraVault
2
+ # @private
3
+ class AgentService < UltraVault::SoapService
4
+
5
+ def initialize
6
+ super(:Agent)
7
+ end
8
+
9
+ def find_agent_by_id(agent_id)
10
+ response_hash = client.request(:getAgentByID, :id => agent_id).to_hash
11
+ params = extract_params(response_hash, :get_agent_by_id_response)
12
+ UltraVault::Agent.new(params)
13
+ end
14
+
15
+ def all_agents
16
+ response_hash = client.request(:getAgents).to_hash
17
+ params = extract_params_array(response_hash, :get_agents_response)
18
+ params.collect do |agent|
19
+ UltraVault::Agent.new(agent)
20
+ end
21
+ end
22
+
23
+ def create_agent(params)
24
+ response_hash = client.request(:createAgentWithObject,
25
+ :agent => map_agent_params(params)).to_hash
26
+ params = extract_params(response_hash,
27
+ :create_agent_with_object_response)
28
+ UltraVault::Agent.new(params)
29
+ end
30
+
31
+ def update_agent(params)
32
+ client.request(:updateAgent,
33
+ :agent => map_agent_params(params)).to_hash
34
+ UltraVault::Agent.new(params)
35
+ end
36
+
37
+ def destroy_agent(id)
38
+ client.request(:deleteAgentById, id: id)
39
+ nil
40
+ end
41
+
42
+ private
43
+
44
+ def map_agent_params(params)
45
+ mapped_params = {}
46
+ params.keys.each do |key|
47
+ case key
48
+ when :port_number
49
+ mapped_params[:portNumber] = params[key]
50
+ when :os_type
51
+ mapped_params[:osType] = params[key]
52
+ else
53
+ mapped_params[key] = params[key]
54
+ end
55
+ end
56
+ mapped_params
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
@@ -0,0 +1,18 @@
1
+ module UltraVault
2
+ # @private
3
+ class DiskSafeService < UltraVault::SoapService
4
+
5
+ def initialize
6
+ super(:DiskSafe)
7
+ end
8
+
9
+ def find_disksafes_by_agent_id(agent_id)
10
+ response_hash = client.request(:getDiskSafesForAgent, :agent => {:id => agent_id }).to_hash
11
+ params = extract_params_array(response_hash,
12
+ :get_disk_safes_for_agent_response)
13
+ params.collect do |disk_safe|
14
+ UltraVault::DiskSafe.new(disk_safe)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module UltraVault
2
+ # @private
3
+ class RecoveryPointService < UltraVault::SoapService
4
+
5
+ def initialize
6
+ super(:RecoveryPoints)
7
+ end
8
+
9
+ def find_recovery_points_by_disk_safe_id(disk_safe_id)
10
+ response_hash = client.request(:getRecoveryPoints,
11
+ :diskSafe => {:id => disk_safe_id },
12
+ :includeMerged => false).to_hash
13
+ params = extract_params_array(response_hash,
14
+ :get_recovery_points_response)
15
+ params.collect do |recovery_point|
16
+ UltraVault::RecoveryPoint.new(recovery_point)
17
+ end
18
+
19
+ end
20
+ end
21
+ end
data/test/all.rb ADDED
@@ -0,0 +1,6 @@
1
+ dir = File.dirname(__FILE__)
2
+ $LOAD_PATH.unshift(dir)
3
+
4
+ Dir["#{dir}/**/test_*.rb"].sort.each do |file|
5
+ require file.sub(/^#{dir}\/(.*)\.rb$/, '\1')
6
+ end
@@ -0,0 +1,88 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../../lib/ultravault'
3
+ require 'vcr'
4
+
5
+ VCR.configure do |c|
6
+ c.cassette_library_dir = "#{File.dirname(__FILE__)}/../vcr_cassettes"
7
+ c.hook_into :webmock # or :fakeweb
8
+ end
9
+
10
+ class ClientCodeTest < Test::Unit::TestCase
11
+
12
+ context "typical usage" do
13
+
14
+ should "retrieve agents, disksafes and recovery points" do
15
+ VCR.use_cassette('all_agents') do
16
+
17
+ # Set up the service
18
+ UltraVault.configure do |config|
19
+ config.host = 'foo.bar.baz'
20
+ config.port = 9080
21
+ config.api_version = 1
22
+ config.ssl = false
23
+ config.username = 'foo'
24
+ config.password = 'bar'
25
+ config.debug = false
26
+ end
27
+
28
+ # Get all agents
29
+ agents = UltraVault::Agent.all
30
+ assert agents.count > 0
31
+
32
+ # Check disksafes
33
+ agent = agents.first
34
+ assert agent.disk_safes.count > 0
35
+
36
+ # Check recovery points
37
+ disk_safe = agent.disk_safes.first
38
+ assert disk_safe.recovery_points.count > 0
39
+ end
40
+
41
+ VCR.use_cassette('agent_by_id') do
42
+ # Get an agent
43
+ agent = UltraVault::Agent.find_by_id("157b9915-0ec8-45cd-a04f-aeea13f48c8e")
44
+ assert_not_nil agent
45
+ end
46
+ end
47
+
48
+ should "create, modify and delete agents" do
49
+ VCR.use_cassette('create_mod_rm_agents') do
50
+
51
+ # Set up the service
52
+ UltraVault.configure do |config|
53
+ config.host = 'foo.bar.baz'
54
+ config.port = 9080
55
+ config.api_version = 1
56
+ config.ssl = false
57
+ config.username = 'foo'
58
+ config.password = 'bar'
59
+ config.debug = false
60
+ end
61
+
62
+ # Create new agent
63
+ agent = UltraVault::Agent.create(
64
+ :hostname => 'foobar.com', :port_number => 9080,
65
+ :description => 'foobarbazbar',
66
+ :os_type => 'linux'
67
+ )
68
+
69
+ assert_not_nil agent
70
+
71
+ agent_id = agent.id
72
+ agent_old_host = agent.hostname
73
+
74
+ # Update an agent's properties
75
+ agent.update(:hostname => 'bazbar')
76
+ assert_not_equal agent_old_host, agent.host
77
+
78
+ # Delete an agent
79
+ agent.destroy
80
+
81
+ # Prove it's gone
82
+ assert_raise Savon::SOAP::Fault do
83
+ agent = UltraVault::Agent.find_by_id(agent_id)
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,4 @@
1
+ require_relative 'fixtures/agent_service'
2
+ require_relative 'fixtures/disk_safe'
3
+ require_relative 'fixtures/disk_safe_service'
4
+ require_relative 'fixtures/recovery_point_service'
@@ -0,0 +1,56 @@
1
+ module UltraVault
2
+ module Fixtures
3
+ def load_agent_service_fixtures
4
+ @agent_by_id = { :database_add_on_enabled=>false,
5
+ :description=>"test-MSSQL",
6
+ :hostname=>"1.2.3.4",
7
+ :id=>"e9bd701b-dac1-4921-ab1c-467f35209e21",
8
+ :os_type=>"WINDOWS", :port_number=>"1167"
9
+ }
10
+
11
+ @agent_by_id_wrapper = {
12
+ :get_agent_by_id_response=>
13
+ {
14
+ :return=> @agent_by_id,
15
+ :"@xmlns:ns1"=>"http://agent.api.server.backup.r1soft.com/"
16
+ }
17
+ }
18
+ @update_agent_wrapper = {
19
+ :update_agent_response=>
20
+ {
21
+ :return=> @agent_by_id,
22
+ :"@xmlns:ns1"=>"http://agent.api.server.backup.r1soft.com/"
23
+ }
24
+ }
25
+ @agent_with_object_wrapper = {
26
+ :create_agent_with_object_response=>
27
+ {
28
+ :return=> @agent_by_id,
29
+ :"@xmlns:ns1"=>"http://agent.api.server.backup.r1soft.com/"
30
+ }
31
+ }
32
+ @all_agents = [
33
+ { :database_add_on_enabled=>false,
34
+ :description=>"test-MSSQL",
35
+ :hostname=>"1.2.3.4",
36
+ :id=>"e9bd701b-dac1-4921-ab1c-467f35209e21",
37
+ :os_type=>"WINDOWS", :port_number=>"1167"
38
+ },
39
+ { :database_add_on_enabled=>false,
40
+ :description=>"test-MSSQL2",
41
+ :hostname=>"2.3.4.5",
42
+ :id=>"b107db9e-dac1-4921-ab1d-12e90253f764support",
43
+ :os_type=>"LINUX", :port_number=>"1168"
44
+ }
45
+ ]
46
+
47
+ @all_agents_wrapper = {
48
+ :get_agents_response=>
49
+ {
50
+ :return=> @all_agents,
51
+ :"@xmlns:ns1"=>"http://agent.api.server.backup.r1soft.com/"
52
+ }
53
+ }
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,35 @@
1
+ module UltraVault
2
+ module Fixtures
3
+ def load_disk_safe_fixtures
4
+ @disk_safe_params = {:agent_id=>"e9bd701b-dac1-4921-ab1c-467f35209e21",
5
+ :compression_level=>"LOW",
6
+ :compression_type=>"QUICKLZ",
7
+ :description=>"test-MSSQL",
8
+ :device_count=>"2",
9
+ :device_list=>{
10
+ :capacity=>"64421359616",
11
+ :device_content_type=>"NTFS",
12
+ :device_path=>"\\\\?\\Volume{1b1cac04-b25f-11e0-bc49-806e6f6e6963}",
13
+ :enabled=>true,
14
+ :mount_point=>"C:\\",
15
+ :mounted=>true},
16
+ :disk_safe_attribute_map=>{:entry=>
17
+ [{:key=>"ARCHIVING_ENABLED", :value=>true},
18
+ {:key=>"FILE_EXCLUDES_ENABLED", :value=>true},
19
+ {:key=>"QUOTA_TYPE", :value=>"NONE"},
20
+ {:key=>"CONTROLPANELS_ENABLED", :value=>true},
21
+ {:key=>"ARCHIVE_POINT_LIMIT", :value=>"-1"},
22
+ {:key=>"RECOVERY_POINT_LIMIT", :value=>"-1"},
23
+ {:key=>"SOFT_QUOTA_VALUE", :value=>"-1.0"},
24
+ {:key=>"REPLICATION_FREQUENCY_LIMIT", :value=>"NO_LIMIT"},
25
+ {:key=>"HARD_QUOTA_VALUE", :value=>"-1.0"}]
26
+ },
27
+ :id=>"3067f030-9814-4314-ae03-75933ac29e37",
28
+ :open=>true,
29
+ :recovery_point_count=>"2",
30
+ :size=>"20931331073",
31
+ :size_of_deltas_in_disk_safe=>"18665326744",
32
+ :volume_id=>"9b77052e-e1d3-4c51-a49a-51544fcb12e1"}
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,60 @@
1
+ module UltraVault
2
+ module Fixtures
3
+ def load_disk_safe_service_fixtures
4
+ @disk_safes_by_agent_id = {
5
+ :agent_id=>"e9bd701b-dac1-4921-ab1c-467f35209e21",
6
+ :backup_partition_table=>true,
7
+ :backup_unmounted_devices=>true,
8
+ :bytes_on_disk=>"20931331073",
9
+ :compression_level=>"LOW",
10
+ :compression_type=>"QUICKLZ",
11
+ :deltas_in_disk_safe=>"6920703",
12
+ :description=>"test-MSSQL",
13
+ :device_backup_type=>"AUTO_ADD_DEVICES",
14
+ :device_count=>"2",
15
+ :device_list=>{
16
+ :allocated_blocks=>"7843190",
17
+ :block_size=>"4096",
18
+ :capacity=>"64421359616",
19
+ :content_id=>"0004AFF104AFE7BC",
20
+ :device_content_type=>"NTFS",
21
+ :device_path=>"\\\\?\\Volume{1b1cac04-b25f-11e0-bc49-806e6f6e6963}",
22
+ :enabled=>true,
23
+ :mount_point=>"C:\\",
24
+ :mounted=>true,
25
+ :total_blocks=>"15727871"
26
+ },
27
+ :disk_safe_attribute_map=>{
28
+ :entry=>[
29
+ {:key=>"ARCHIVING_ENABLED", :value=>true},
30
+ {:key=>"FILE_EXCLUDES_ENABLED", :value=>true},
31
+ {:key=>"QUOTA_TYPE", :value=>"NONE"},
32
+ {:key=>"CONTROLPANELS_ENABLED", :value=>true},
33
+ {:key=>"ARCHIVE_POINT_LIMIT", :value=>"-1"},
34
+ {:key=>"RECOVERY_POINT_LIMIT", :value=>"-1"},
35
+ {:key=>"SOFT_QUOTA_VALUE", :value=>"-1.0"},
36
+ {:key=>"REPLICATION_FREQUENCY_LIMIT", :value=>"NO_LIMIT"},
37
+ {:key=>"HARD_QUOTA_VALUE", :value=>"-1.0"}
38
+ ]},
39
+ :id=>"3067f030-9814-4314-ae03-75933ac29e37",
40
+ :open=>true,
41
+ :path=>"/data/test-volume/3067f030-9814-4314-ae03-75933ac29e37",
42
+ :recovery_point_count=>"2",
43
+ :size=>"20931331073",
44
+ :size_of_deltas_in_disk_safe=>"18665326744",
45
+ :total_free_pages=>"0",
46
+ :total_free_pages_bytes=>"0",
47
+ :total_page_bytes=>"20924334080",
48
+ :total_page_count=>"638560",
49
+ :volume_id=>"9b77052e-e1d3-4c51-a49a-51544fcb12e1"
50
+ }
51
+
52
+ @disk_safes_by_agent_id_wrapper = {
53
+ :get_disk_safes_for_agent_response=>{
54
+ :return=> @disk_safes_by_agent_id,
55
+ :"@xmlns:ns1"=>"http://disksafe.api.server.backup.r1soft.com/"
56
+ }
57
+ }
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ module UltraVault
2
+ module Fixtures
3
+ def load_recovery_point_service_fixtures
4
+ @recovery_points_by_disk_safe_id = [
5
+ {:agent_id=>"e9bd701b-dac1-4921-ab1c-467f35209e21",
6
+ :created_on_timestamp_in_millis=>"1330361712361",
7
+ :disk_safe_id=>"3067f030-9814-4314-ae03-75933ac29e37",
8
+ :recovery_point_id=>"1",
9
+ :recovery_point_state=>"AVAILABLE"},
10
+ {:agent_id=>"e9bd701b-dac1-4921-ab1c-467f35209e21",
11
+ :created_on_timestamp_in_millis=>"1330427016495",
12
+ :disk_safe_id=>"3067f030-9814-4314-ae03-75933ac29e37",
13
+ :recovery_point_id=>"2",
14
+ :recovery_point_state=>"AVAILABLE"}
15
+ ]
16
+
17
+ @recovery_points_by_disk_safe_id_wrapper = {
18
+ :get_recovery_points_response=>
19
+ {
20
+ :return=> @recovery_points_by_disk_safe_id,
21
+ :"@xmlns:ns1"=>"http://recoverypoints.api.server.backup.r1soft.com/"
22
+ }
23
+ }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,35 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'test/unit'
5
+ require 'shoulda'
6
+ require 'mocha'
7
+ require 'webmock/test_unit'
8
+ require 'savon'
9
+ require 'ostruct'
10
+
11
+ include WebMock::API
12
+
13
+ require_relative '../lib/ultravault/api_request'
14
+ require_relative '../lib/ultravault/client'
15
+ require_relative '../lib/ultravault/config'
16
+ require_relative '../lib/ultravault/data_objects/agent'
17
+ require_relative '../lib/ultravault/data_objects/disk_safe'
18
+ require_relative '../lib/ultravault/data_objects/recovery_point'
19
+ require_relative '../lib/ultravault/soap_service'
20
+ require_relative '../lib/ultravault/soap_service/agent_service'
21
+ require_relative '../lib/ultravault/soap_service/disk_safe_service'
22
+ require_relative '../lib/ultravault/soap_service/recovery_point_service'
23
+
24
+ require_relative 'support/fixtures'
25
+
26
+ include UltraVault::Fixtures
27
+
28
+ UltraVault.configure do |config|
29
+ config.host = 'foo.bar.baz'
30
+ config.port = 9080
31
+ config.api_version = 1
32
+ config.ssl = false
33
+ config.username = 'foo'
34
+ config.password = 'bar'
35
+ end