From 7d26cfb6133bdcdf8c058d0f84cdb162668757d5 Mon Sep 17 00:00:00 2001 From: Alex Skrenchuk Date: Thu, 7 Sep 2023 23:37:33 -0700 Subject: [PATCH 1/5] fix mimitype string for gzip files application/x-gzip is a deprecated mimetype add unit test for determining gzip mimetype --- lib/ontologies_linked_data/utils/file.rb | 2 +- test/data/ontology_files/BRO_v3.2.owl.gz | Bin 0 -> 37702 bytes test/models/test_ontology_submission.rb | 7 +++++++ 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 test/data/ontology_files/BRO_v3.2.owl.gz diff --git a/lib/ontologies_linked_data/utils/file.rb b/lib/ontologies_linked_data/utils/file.rb index b7cc1b5f..4303bf01 100644 --- a/lib/ontologies_linked_data/utils/file.rb +++ b/lib/ontologies_linked_data/utils/file.rb @@ -20,7 +20,7 @@ def self.gzip?(file_path) raise ArgumentError, "File path #{file_path} not found" unless File.exist? file_path file_type = `file --mime -b #{Shellwords.escape(file_path)}` - file_type.split(';')[0] == 'application/x-gzip' + file_type.split(';')[0] == 'application/gzip' end def self.files_from_zip(file_path) diff --git a/test/data/ontology_files/BRO_v3.2.owl.gz b/test/data/ontology_files/BRO_v3.2.owl.gz new file mode 100644 index 0000000000000000000000000000000000000000..9e1abfd608e057f934afbfde2ca263ea564a9c4d GIT binary patch literal 37702 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 Date: Fri, 8 Sep 2023 00:08:29 -0700 Subject: [PATCH 2/5] fix filename --- test/models/test_ontology_submission.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/test_ontology_submission.rb b/test/models/test_ontology_submission.rb index 1b977209..4888a651 100644 --- a/test/models/test_ontology_submission.rb +++ b/test/models/test_ontology_submission.rb @@ -82,7 +82,7 @@ def test_automaster_from_zip end def test_is_gzip - gzipfile = "./test/data/ontology_files/BRO_v3.2.gz" + gzipfile = "./test/data/ontology_files/BRO_v3.2.owl.gz" zipfile = "./test/data/ontology_files/evoc_v2.9.zip" assert LinkedData::Utils::FileHelpers.gzip?(gzipfile) refute LinkedData::Utils::FileHelpers.gzip?(zipfile) From 72c950af8a141b427c1a24458a9836294ddee035 Mon Sep 17 00:00:00 2001 From: Alex Skrenchuk Date: Fri, 8 Sep 2023 11:35:19 -0700 Subject: [PATCH 3/5] parse sumbission for .gz file to test gzip support --- test/models/test_ontology_submission.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/test_ontology_submission.rb b/test/models/test_ontology_submission.rb index 4888a651..b6374544 100644 --- a/test/models/test_ontology_submission.rb +++ b/test/models/test_ontology_submission.rb @@ -8,7 +8,7 @@ def test_valid_ontology acronym = "BRO-TST" name = "SNOMED-CT TEST" - ontologyFile = "./test/data/ontology_files/BRO_v3.2.owl" + ontologyFile = "./test/data/ontology_files/BRO_v3.2.owl.gz" id = 10 owl, bogus, user, contact = submission_dependent_objects("OWL", acronym, "test_linked_models", name) From 8d1209ea0cbe950c863fad5e630e6c963e0be11f Mon Sep 17 00:00:00 2001 From: Alex Skrenchuk Date: Fri, 8 Sep 2023 14:38:29 -0700 Subject: [PATCH 4/5] Revert "parse sumbission for .gz file to test gzip support" This reverts commit 72c950af8a141b427c1a24458a9836294ddee035. --- test/models/test_ontology_submission.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/models/test_ontology_submission.rb b/test/models/test_ontology_submission.rb index b6374544..4888a651 100644 --- a/test/models/test_ontology_submission.rb +++ b/test/models/test_ontology_submission.rb @@ -8,7 +8,7 @@ def test_valid_ontology acronym = "BRO-TST" name = "SNOMED-CT TEST" - ontologyFile = "./test/data/ontology_files/BRO_v3.2.owl.gz" + ontologyFile = "./test/data/ontology_files/BRO_v3.2.owl" id = 10 owl, bogus, user, contact = submission_dependent_objects("OWL", acronym, "test_linked_models", name) From 4f9fcd3f0f65ec88789ddda6885b3ae6a1fda733 Mon Sep 17 00:00:00 2001 From: Alex Skrenchuk Date: Fri, 8 Sep 2023 15:16:46 -0700 Subject: [PATCH 5/5] add unit test for parsing gzipped submission --- test/models/test_ontology_submission.rb | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/models/test_ontology_submission.rb b/test/models/test_ontology_submission.rb index 4888a651..fcc910e9 100644 --- a/test/models/test_ontology_submission.rb +++ b/test/models/test_ontology_submission.rb @@ -508,6 +508,41 @@ def test_submission_parse_zip puts "#{ctr} classes with no label" end + def test_submission_parse_gzip + skip if ENV["BP_SKIP_HEAVY_TESTS"] == "1" + + acronym = "BROGZ" + name = "BRO GZIPPED" + ontologyFile = "./test/data/ontology_files/BRO_v3.2.owl.gz" + id = 11 + + LinkedData::TestCase.backend_4s_delete + + ont_submision = LinkedData::Models::OntologySubmission.new({submissionId: id}) + refute ont_submision.valid? + assert_equal 4, ont_submision.errors.length + uploadFilePath = LinkedData::Models::OntologySubmission.copy_file_repository(acronym, id, ontologyFile) + ont_submision.uploadFilePath = uploadFilePath + owl, bro, user, contact = submission_dependent_objects("OWL", acronym, "test_linked_models", name) + ont_submision.released = DateTime.now - 4 + ont_submision.hasOntologyLanguage = owl + ont_submision.prefLabelProperty = RDF::URI.new("http://bioontology.org/projects/ontologies/radlex/radlexOwl#Preferred_name") + ont_submision.ontology = bro + ont_submision.contact = [contact] + assert ont_submision.valid? + ont_submision.save + parse_options = {process_rdf: true, reasoning: true, index_search: false, run_metrics: false, diff: false} + begin + tmp_log = Logger.new(TestLogFile.new) + ont_submision.process_submission(tmp_log, parse_options) + rescue StandardError => e + puts "Error, logged in #{tmp_log.instance_variable_get("@logdev").dev.path}" + raise e + end + + assert ont_submision.ready?({status: [:uploaded, :rdf, :rdf_labels]}) + end + def test_download_ontology_file begin server_port = Random.rand(55000..65535) # http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Dynamic.2C_private_or_ephemeral_ports