summaryrefslogtreecommitdiff
path: root/test/unit_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit_test.rb')
-rw-r--r--test/unit_test.rb189
1 files changed, 189 insertions, 0 deletions
diff --git a/test/unit_test.rb b/test/unit_test.rb
new file mode 100644
index 0000000..11b0759
--- /dev/null
+++ b/test/unit_test.rb
@@ -0,0 +1,189 @@
+#TEST_USER = "mgtest"
+#TEST_PW = "mgpasswd"
+#ENV['RACK_ENV'] = 'test'
+
+require "rubygems"
+require "sinatra"
+require "uri"
+require "yaml"
+require 'application.rb'
+require 'test/unit'
+require 'rack/test'
+require 'lib/test_util.rb'
+require 'test/test_examples.rb'
+
+TEST_USER = "guest"
+TEST_PW = "guest"
+
+#LOGGER = OTLogger.new(STDOUT)
+#LOGGER.datetime_format = "%Y-%m-%d %H:%M:%S "
+#LOGGER.formatter = Logger::Formatter.new
+
+module Sinatra
+ set :raise_errors, false
+ set :show_exceptions, false
+end
+
+class Exception
+ def message
+ errorCause ? errorCause.to_yaml : to_s
+ end
+end
+
+class ValidationTest < Test::Unit::TestCase
+ include Rack::Test::Methods
+ include Lib::TestUtil
+
+ def global_setup
+ puts "login and upload datasets"
+ if AA_SERVER
+ @@subjectid = OpenTox::Authorization.authenticate(TEST_USER,TEST_PW)
+ raise "could not log in" unless @@subjectid
+ puts "logged in: "+@@subjectid.to_s
+ else
+ puts "AA disabled"
+ @@subjectid = nil
+ end
+ f = File.new("data/hamster_carcinogenicity.mini.csv")
+ @@data_class_mini = ValidationExamples::Util.upload_dataset(f, @@subjectid)
+ @@feat_class_mini = ValidationExamples::Util.prediction_feature_for_file(f)
+ end
+
+ def global_teardown
+ puts "delete and logout"
+ OpenTox::Dataset.find(@@data_class_mini,@@subjectid).delete(@@subjectid) if defined?@@data_class_mini
+ @@cv.delete(@@subjectid) if defined?@@cv
+ @@report.delete(@@subjectid) if defined?@@report
+ @@qmrfReport.delete(@@subjectid) if defined?@@qmrfReport
+ OpenTox::Authorization.logout(@@subjectid) if AA_SERVER
+ end
+
+ def test_crossvalidation
+ puts "test_crossvalidation"
+ #assert_rest_call_error OpenTox::NotFoundError do
+ # OpenTox::Crossvalidation.find(File.join(CONFIG[:services]["opentox-validation"],"crossvalidation/noexistingid"))
+ #end
+ p = {
+ :dataset_uri => @@data_class_mini,
+ :algorithm_uri => File.join(CONFIG[:services]["opentox-algorithm"],"lazar"),
+ :algorithm_params => "feature_generation_uri="+File.join(CONFIG[:services]["opentox-algorithm"],"fminer/bbrc"),
+ :prediction_feature => @@feat_class_mini,
+ :num_folds => 2 }
+ t = OpenTox::SubTask.new(nil,0,1)
+ def t.progress(pct)
+ if !defined?@last_msg or @last_msg+3<Time.new
+ puts "waiting for crossvalidation: "+pct.to_s
+ @last_msg=Time.new
+ end
+ end
+ def t.waiting_for(task_uri); end
+ cv = OpenTox::Crossvalidation.create(p, @@subjectid, t)
+ assert cv.uri.uri?
+ if @@subjectid
+ assert_rest_call_error OpenTox::NotAuthorizedError do
+ OpenTox::Crossvalidation.find(cv.uri)
+ end
+ end
+ cv = OpenTox::Crossvalidation.find(cv.uri, @@subjectid)
+ assert cv.uri.uri?
+ if @@subjectid
+ assert_rest_call_error OpenTox::NotAuthorizedError do
+ cv.summary(cv)
+ end
+ end
+ summary = cv.summary(@@subjectid)
+ assert_kind_of Hash,summary
+ @@cv = cv
+ end
+
+ def test_crossvalidation_report
+ #@@cv = OpenTox::Crossvalidation.find("http://local-ot/validation/crossvalidation/48", @@subjectid)
+
+ puts "test_crossvalidation_report"
+ assert defined?@@cv,"no crossvalidation defined"
+ assert_kind_of OpenTox::Crossvalidation,@@cv
+ #assert_rest_call_error OpenTox::NotFoundError do
+ # OpenTox::CrossvalidationReport.find_for_crossvalidation(@@cv.uri)
+ #end
+ if @@subjectid
+ assert_rest_call_error OpenTox::NotAuthorizedError do
+ OpenTox::CrossvalidationReport.create(@@cv.uri)
+ end
+ end
+ report = OpenTox::CrossvalidationReport.create(@@cv.uri,@@subjectid)
+ assert report.uri.uri?
+ if @@subjectid
+ assert_rest_call_error OpenTox::NotAuthorizedError do
+ OpenTox::CrossvalidationReport.find(report.uri)
+ end
+ end
+ report = OpenTox::CrossvalidationReport.find(report.uri,@@subjectid)
+ assert report.uri.uri?
+ report2 = OpenTox::CrossvalidationReport.find_for_crossvalidation(@@cv.uri,@@subjectid)
+ assert_equal report.uri,report2.uri
+ report3_uri = @@cv.find_or_create_report(@@subjectid)
+ assert_equal report.uri,report3_uri
+ @report = report2
+ end
+
+ def test_qmrf_report
+ #@@cv = OpenTox::Crossvalidation.find("http://local-ot/validation/crossvalidation/47", @@subjectid)
+
+ puts "test_qmrf_report"
+ assert defined?@@cv,"no crossvalidation defined"
+
+ validations = @@cv.metadata[OT.validation]
+ assert_kind_of Array,validations
+ assert validations.size==@@cv.metadata[OT.numFolds]
+
+ val = OpenTox::Validation.find(validations[0], @@subjectid)
+ model_uri = val.metadata[OT.model]
+ model = OpenTox::Model::Generic.find(model_uri, @@subjectid)
+ assert model!=nil
+
+ #assert_rest_call_error OpenTox::NotFoundError do
+ # OpenTox::QMRFReport.find_for_model(model_uri, @@subjectid)
+ #end
+
+ @@qmrfReport = OpenTox::QMRFReport.create(model_uri, @@subjectid)
+ end
+
+ ################### utils and overrides ##########################
+
+ def app
+ Sinatra::Application
+ end
+
+ # checks RestCallError type
+ def assert_rest_call_error( ex )
+ if ex==OpenTox::NotAuthorizedError and @@subjectid==nil
+ puts "AA disabled: skipping test for not authorized"
+ return
+ end
+ begin
+ yield
+ rescue OpenTox::RestCallError => e
+ report = e.errorCause
+ while report.errorCause
+ report = report.errorCause
+ end
+ assert_equal report.errorType,ex.to_s
+ end
+ end
+
+ # hack to have a global_setup and global_teardown
+ def teardown
+ if((@@expected_test_count-=1) == 0)
+ global_teardown
+ end
+ end
+ def setup
+ unless defined?@@expected_test_count
+ @@expected_test_count = (self.class.instance_methods.reject{|method| method[0..3] != 'test'}).length
+ global_setup
+ end
+ end
+
+end
+
+