Skip to content

Commit

Permalink
Switching Mediaflux test instances depending on a environment variable (
Browse files Browse the repository at this point in the history
#888)

* Switching Mediaflux test instances depending on a environment variable

* rubocop

* Normalizing testing for ansible and docker responses from mediaflux

* Changing mflux api port when switching between build instances

* rubocop

* Update to match the original test more closely

---------

Co-authored-by: carolyncole <1599081+carolyncole@users.noreply.github.com>
  • Loading branch information
JaymeeH and carolyncole authored Aug 21, 2024
1 parent 8a4d46e commit dc5288d
Show file tree
Hide file tree
Showing 22 changed files with 70 additions and 30 deletions.
4 changes: 2 additions & 2 deletions app/models/mediaflux/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ def self.request_path
end

def self.uri
# This is the necessary URI for the Ansible build(s) of Mediaflux
URI("#{Connection.transport}://#{Connection.host}/#{request_path}")
# Setting the URI to the Ansible build or Docker build of mediaflux depending on the environment
URI("#{Connection.transport}://#{Connection.host}:#{Connection.port}#{request_path}")
end

# Constructs a new HTTP POST request for usage with the Mediaflux API
Expand Down
2 changes: 1 addition & 1 deletion config/mediaflux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ test:
api_root_collection: 'path=/td-test-001/test/tigerdata'
api_transport: 'http'
api_host: 'mflux-ci.lib.princeton.edu'
api_port: <%= ENV["TEST_MEDIAFLUX_PORT"] || '8888' %>
api_port: <%= ENV["TEST_MEDIAFLUX_PORT"] || '80' %>

# Alternate to test is still a test location
api_alternate_root_ns: '/td-test-002/tigerdataNS'
Expand Down
10 changes: 6 additions & 4 deletions spec/controllers/mediaflux_info_controller_spec.rb
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
# frozen_string_literal: true
require "rails_helper"

RSpec.describe MediafluxInfoController do
RSpec.describe MediafluxInfoController, connect_to_mediaflux: true do
let(:user) { FactoryBot.create :user }
let(:docker_response) { "{\"vendor\":\"Arcitecta Pty. Ltd.\",\"version\":\"4.16.032\"}" }
let(:ansible_response) { "{\"vendor\":\"Arcitecta Pty. Ltd.\",\"version\":\"4.16.047\"}" }
before do
sign_in user
end

it "gets the mediaflux information", connect_to_mediaflux: true do
it "gets the mediaflux information" do
expect { get :index, format: "json" }.not_to raise_error(Mediaflux::SessionExpired)
expect(response.body).to eq("{\"vendor\":\"Arcitecta Pty. Ltd.\",\"version\":\"4.16.047\"}")
expect(response.body).to eq(docker_response).or eq(ansible_response)
end

it "does not retry infinately", connect_to_mediaflux: true do
it "does not retry infinately" do
original_pass = Rails.configuration.mediaflux["api_password"]
original_session = user.mediaflux_session

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
require "rails_helper"

RSpec.describe Mediaflux::AccumulatorCreateCollectionRequest, connect_to_mediaflux: true, type: :model do
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:user) { FactoryBot.create(:user) }
let(:approved_project) { FactoryBot.create(:approved_project) }
let(:mediaflux_response) { "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<response><reply type=\"result\"><result></result></reply></response>" }
Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/asset_create_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
require "rails_helper"

RSpec.describe Mediaflux::AssetCreateRequest, connect_to_mediaflux: true, type: :model do
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:session_token) { Mediaflux::LogonRequest.new.session_token }
let(:root_ns) { Rails.configuration.mediaflux["api_root_collection_namespace"] } # /td-test-001
let(:parent_collection) { Rails.configuration.mediaflux["api_root_collection_name"] } # tigerdata
Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/asset_exist_request_headers_spec.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require "rails_helper"

RSpec.describe Mediaflux::AssetExistRequest, type: :model, connect_to_mediaflux: false do
RSpec.describe Mediaflux::AssetExistRequest, type: :model, connect_to_mediaflux: true do
let(:user) { FactoryBot.create(:user) }
let(:namespace_root) { Rails.configuration.mediaflux["api_root_collection_namespace"] }

Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/iterator_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
require "rails_helper"

RSpec.describe Mediaflux::IteratorRequest, connect_to_mediaflux: true, type: :model do
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:user) { FactoryBot.create(:user) }
let(:approved_project) { FactoryBot.create(:approved_project) }

Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/logoff_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
subject(:request) { described_class.new(session_token: session_token) }
let(:user) { FactoryBot.create(:user) }
let(:session_token) { user.mediaflux_session }
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }

describe "#resolve" do
it "disconnects the session" do
Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/logon_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
subject(:request) { described_class.new }
let(:user) { FactoryBot.create(:user) }
let(:session_token) { user.mediaflux_session }
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }

describe "#session_token" do
it "authenticates and stores the session token" do
Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/query_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
require "rails_helper"

RSpec.describe Mediaflux::QueryRequest, connect_to_mediaflux: true, type: :model do
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:user) { FactoryBot.create(:user) }
let(:approved_project) { FactoryBot.create(:approved_project) }

Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

RSpec.describe Mediaflux::Request, connect_to_mediaflux: true, type: :model do
subject(:request) { described_class.new }
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:mediaflux_response) { "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" }

describe "#resolve" do
Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/service_execute_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
let(:approved_project) { FactoryBot.create(:approved_project) }
let(:session_token) { "test-session-token" }
let(:identity_token) { "test-identity-token" }
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }

before do
# create a real collection as an example of a service execution
Expand Down
9 changes: 6 additions & 3 deletions spec/models/mediaflux/store_list_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@
require "rails_helper"

RSpec.describe Mediaflux::StoreListRequest, connect_to_mediaflux: true, type: :model do
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:user) { FactoryBot.create(:user) }
let(:approved_project) { FactoryBot.create(:approved_project) }
let(:mediaflux_response) { "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<response><reply type=\"result\"><result></result></reply></response>" }
# Docker and Ansible responses are the same, but may be different in the future
let(:docker_response_store) { { id: "1", name: "db", tag: "", type: "database" } }
let(:ansible_response_store) { { id: "1", name: "db", tag: "", type: "database" } }

describe "#metadata" do
before do
Expand All @@ -16,8 +19,8 @@
it "parses a metadata response" do
stores_request = described_class.new(session_token: user.mediaflux_session)
stores = stores_request.stores
expect(stores.count).to eq(2)
expect(stores.first).to eq({ id: "1", name: "db", tag: "", type: "database" })
expect(stores.count).to eq(2).or eq(5)
expect(stores.first).to eq(docker_response_store).or eq(ansible_response_store)
end
end
end
4 changes: 3 additions & 1 deletion spec/models/mediaflux/time_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
RSpec.describe Mediaflux::Time do
let(:project) { FactoryBot.build :project_with_doi }
let(:current_user) { FactoryBot.create(:user, uid: "jh1234") }
let(:docker_response) { "Etc/UTC" }
let(:ansible_response) { "America/Chicago" }
subject(:instance) { described_class.new }

describe "#convert", connect_to_mediaflux: true do
Expand All @@ -20,7 +22,7 @@
xml_snip = metadata[:ctime]
initial_tz = xml_snip.xpath("./@tz").text
#change back to America/New_York after changing the mflux-ci server to eastern time
expect(initial_tz).to eq "America/Chicago"
expect(initial_tz).to eq(docker_response).or eq(ansible_response)

final_tz = instance.convert(xml_snip:)
expect(final_tz).to include("-04:00") or include("-05:00") #America/New_York changes based on daylights savings time
Expand Down
2 changes: 1 addition & 1 deletion spec/models/mediaflux/token_create_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
subject(:request) { described_class.new(session_token: session_token, domain: Mediaflux::LogonRequest.mediaflux_domain, user: Mediaflux::LogonRequest.mediaflux_user) }
let(:user) { FactoryBot.create(:user) }
let(:session_token) { user.mediaflux_session }
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }

describe "#identity" do
it "creates an identity token for the user" do
Expand Down
4 changes: 3 additions & 1 deletion spec/models/mediaflux/version_request_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
subject(:request) { described_class.new(session_token: session_token) }
let(:session_token) { user.mediaflux_session }
let(:user) { FactoryBot.create(:user) }
let(:docker_response) { "4.16.032" }
let(:ansible_response) { "4.16.047" }

describe "#resolve" do
it "authenticates and stores the session token" do
request.resolve

expect(request.version[:vendor]).to eq("Arcitecta Pty. Ltd.")
expect(request.version[:version]).to eq("4.16.047")
expect(request.version[:version]).to eq(docker_response).or eq(ansible_response)
end
end
end
4 changes: 2 additions & 2 deletions spec/models/mediaflux_status_spec.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require "rails_helper"

RSpec.describe MediafluxStatus, type: :model do
RSpec.describe MediafluxStatus, connect_to_mediaflux: true, type: :model do
context "when Mediaflux is up and running" do
it "reports status OK" do
status = described_class.new
Expand All @@ -10,7 +10,7 @@
end

context "when we cannot connecto Mediaflux" do
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:error_node) { "<response><reply><error>something went wrong</error></reply></response>" }
before do
stub_request(:post, mediaflux_url)
Expand Down
6 changes: 4 additions & 2 deletions spec/requests/mediaflux_info_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@

context "logged in user" do
let(:user) { FactoryBot.create(:user, uid: "pul123") }
let(:mediaflux_url) { "http://mflux-ci.lib.princeton.edu/__mflux_svc__" }
let(:mediaflux_url) { Mediaflux::Request.uri.to_s }
let(:docker_response) { "4.16.032" }
let(:ansible_response) { "4.16.047" }

before do
sign_in user
Expand All @@ -31,7 +33,7 @@
it "renders a successful response" do
get mediaflux_info_index_path
expect(response).to be_successful
expect(response.parsed_body).to include("4.16.047")
expect(response.parsed_body).to include(docker_response).or include(ansible_response)
end
end
end
Expand Down
24 changes: 24 additions & 0 deletions spec/support/connect_to_mediaflux.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,18 @@ def create_test_root_namespace(user)
if ex.metadata[:connect_to_mediaflux]
# Ensure the latest mediaflux schema has been loaded before running the tests
# Since we are testing against the Ansbile-provisioned Mediaflux server, we do not need to change the host api here
@original_api_host = Rails.configuration.mediaflux["api_host"]
@original_api_port = Rails.configuration.mediaflux["api_port"]

require "rake"
Rails.application.load_tasks

# change the api host for all tests to '0.0.0.0' if MFLUX_LOCAL is set
if ENV["MFLUX_LOCAL"]
Rails.configuration.mediaflux["api_host"] = "0.0.0.0"
Rails.configuration.mediaflux["api_port"] = "8888"
end

Rake::Task["schema:create"].invoke
reset_mediaflux_root
end
Expand All @@ -57,8 +66,23 @@ def create_test_root_namespace(user)
Rails.logger.error(message)
end

config.after(:each) do |ex|
if ex.metadata[:connect_to_mediaflux]
Rails.configuration.mediaflux["api_host"] = @original_api_host
Rails.configuration.mediaflux["api_port"] = @original_api_port
end
end

config.after(:suite) do |_ex|
# Clean up the root namespace after all tests have run
original_api_host = Rails.configuration.mediaflux["api_host"]
if ENV["MFLUX_LOCAL"]
Rails.configuration.mediaflux["api_host"] = "0.0.0.0"
Rails.configuration.mediaflux["api_port"] = "8888"
end

reset_mediaflux_root
Rails.configuration.mediaflux["api_host"] = original_api_host
Rails.configuration.mediaflux["api_port"] = @original_api_port
end
end
4 changes: 3 additions & 1 deletion spec/system/mediaflux_info_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@

describe "mediaflux_info", type: :system, js: true, connect_to_mediaflux: true do
let(:current_user) { FactoryBot.create(:user, uid: "pul123") }
let(:mflux_port) { Rails.configuration.mediaflux["api_port"] }

it "shows the mediaflux version" do
sign_in current_user
visit "/mediaflux_info"
expect(page).to have_content("Connected to MediaFlux")
expect(page).to have_content("Mediaflux Port:\n8888\n")
expect(page).to have_content("Mediaflux Port:\n#{mflux_port}\n")
end
end
2 changes: 1 addition & 1 deletion spec/system/project_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require "rails_helper"

RSpec.describe "Project Page", type: :system, connect_to_mediaflux: true do
RSpec.describe "Project Page", connect_to_mediaflux: true, type: :system do
let(:sponsor_user) { FactoryBot.create(:project_sponsor, uid: "pul123") }
let(:sysadmin_user) { FactoryBot.create(:sysadmin, uid: "puladmin") }
let!(:data_manager) { FactoryBot.create(:data_manager, uid: "pul987") }
Expand Down
7 changes: 5 additions & 2 deletions spec/system/welcome_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
let(:other_user) { FactoryBot.create(:user, uid: "zz123") }
let(:no_projects_user) { FactoryBot.create(:user, uid: "qw999") }
let(:no_projects_sponsor) { FactoryBot.create(:project_sponsor, uid: "gg717") }
let(:docker_response) { "Mediaflux: 4.16.032" }
let(:ansible_response) { "Mediaflux: 4.16.047" }

before do
FactoryBot.create(:project, data_sponsor: current_user.uid, data_manager: other_user.uid, title: "project 111")
FactoryBot.create(:project, data_sponsor: other_user.uid, data_manager: current_user.uid, title: "project 222")
Expand All @@ -39,11 +42,11 @@
expect(page).to have_content "Log Out"
end

it "shows the Mediflux version on the home page for a logged in user", connect_to_mediaflux: true do
it "shows the Mediflux version on the home page for a logged in user" do
sign_in current_user
visit "/"
sleep(1)
expect(page).to have_content "Mediaflux: 4.16.047"
expect(page).to have_content(docker_response).or have_content(ansible_response)
end

it "shows the projects based on the user's role" do
Expand Down

0 comments on commit dc5288d

Please sign in to comment.