cookbooks/aws-parallelcluster-slurm/spec/unit/libraries/storage_spec.rb (117 lines of code) (raw):

require 'spec_helper' describe "aws-parallelcluster-slurm:libraries:storage_change_supports_live_update" do let(:node) do { "cluster" => { "change_set_path" => "/SHARED_DIR/change-set.json" }, } end let(:mock_shared_storage_change_info) { instance_double(SharedStorageChangeInfo) } shared_examples "the correct method" do |changeset, info_outcome, expected_result| it "returns #{expected_result}" do allow(File).to receive(:read).with("/SHARED_DIR/change-set.json").and_return(JSON.dump(changeset)) allow(SharedStorageChangeInfo).to receive(:new).and_return(mock_shared_storage_change_info) allow(mock_shared_storage_change_info).to receive(:support_live_updates?).and_return(info_outcome) result = storage_change_supports_live_update? expect(result).to eq(expected_result) end end context "when changeset is empty" do changeset = { "changeSet" => [], } include_examples "the correct method", changeset, nil, true end context "when changeset does not contain any change for SharedStorage" do changeset = { "changeSet" => [ { parameter: "NOT_SharedStorage", }, ], } include_examples "the correct method", changeset, nil, true end context "when changeset contains a change for SharedStorage" do changeset = { "changeSet" => [ { parameter: "SharedStorage", }, { parameter: "NOT_SharedStorage", }, ], } [true, false].each do |info_outcome| context "and SharedStorageChangeInfo says it is #{'not ' unless info_outcome}supported" do expected_result = info_outcome include_examples "the correct method", changeset, info_outcome, expected_result end end end end def build_storage_change(type, ownership, action) storage_identified = case type when "Ebs", "FsxOntap", "FsxOpenZfs" "VolumeId" when "FileCache" "FileCacheId" else "FileSystemId" end storage_settings = case ownership when "external" { storage_identified => "STORAGE_ID", } when "managed" { "SETTING_1" => "VALUE_1", "SETTING_2" => "VALUE_2", } end case action when "mount" current_value = nil requested_value = { "MountDir" => "/opt/shared/#{type}/#{ownership}/1", "Name" => "shared-#{type}-#{ownership}-external-1", "StorageType" => "#{type}", "#{type}Settings" => storage_settings, } when "unmount" current_value = { "MountDir" => "/opt/shared/#{type}/#{ownership}/1", "Name" => "shared-#{type}-#{ownership}-external-1", "StorageType" => "#{type}", "#{type}Settings" => storage_settings, } requested_value = nil else raise "Unrecognized action #{action}. It must be one of : mount, unmount" end { "parameter" => "SharedStorage", "currentValue" => current_value, "requestedValue" => requested_value, } end describe "aws-parallelcluster-slurm:libraries:SharedStorageChangeInfo" do shared_examples "behaves correctly" do |change, expected_result| it "support_live_updates? returns the correct value" do result = SharedStorageChangeInfo.new(change).support_live_updates? expect(result).to eq(expected_result) end end %w(Ebs Efs FsxLustre FsxOntap FsxOpenZfs FileCache).each do |storage_type| %w(external managed).each do |storage_ownership| %w(mount unmount).each do |storage_action| context "when #{storage_action}ing #{storage_ownership} #{storage_type}" do change = build_storage_change(storage_type, storage_ownership, storage_action) expected_result = %(Efs FsxLustre FsxOntap FsxOpenZfs FileCache).include?(storage_type) && storage_ownership == "external" include_examples "behaves correctly", change, expected_result end end end end end