pho 0.0.1

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.
@@ -0,0 +1,29 @@
1
+ require 'pho'
2
+
3
+ store = Pho::Store.new("http://api.talis.local/stores/space", "ldodds", "gwpjmv7z")
4
+
5
+ state = store.status()
6
+ puts state.inspect
7
+
8
+ resp = store.store_file("/home/ldodds/data/space/nssdc/n3/1969-059A.rdf")
9
+ puts resp
10
+ puts resp.status
11
+
12
+ resp = store.store_file(File.new("/home/ldodds/data/space/nssdc/n3/1969-059B.rdf") )
13
+ puts resp.status
14
+
15
+ resp = store.store_url("http://api.talis.local/stores/space/meta?about=http://purl.org/net/schemas/space/spacecraft/1969-059A")
16
+ puts resp.status
17
+
18
+ resp = store.store_url( URI.parse("http://api.talis.local/stores/space/meta?about=http://purl.org/net/schemas/space/spacecraft/1969-059A") )
19
+ puts resp.status
20
+
21
+ resp = store.describe("http://purl.org/net/schemas/space/spacecraft/1969-059A")
22
+ puts resp
23
+
24
+ resp = store.describe("http://purl.org/net/schemas/space/spacecraft/1969-059A", "application/json")
25
+ puts resp
26
+
27
+ store.snapshot
28
+ store.reindex
29
+ store.reset
@@ -0,0 +1,96 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'pho'
3
+ require 'test/unit'
4
+ require 'mocha'
5
+
6
+ class ContentboxTest < Test::Unit::TestCase
7
+
8
+ def test_upload_item
9
+ mc = mock()
10
+ mc.expects(:set_auth)
11
+ mc.expects(:post).with("http://api.talis.com/stores/testing/items", "data", {"Content-Type" => "text/plain"})
12
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
13
+ f = StringIO.new("data")
14
+ resp = store.upload_item(f, "text/plain")
15
+ end
16
+
17
+ def test_upload_item_to_uri
18
+ mc = mock()
19
+ mc.expects(:set_auth)
20
+ mc.expects(:put).with("http://api.talis.com/stores/testing/items/1/2/3", "data", {"Content-Type" => "text/plain"})
21
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
22
+ f = StringIO.new("data")
23
+ resp = store.upload_item(f, "text/plain", "http://api.talis.com/stores/testing/items/1/2/3")
24
+
25
+ end
26
+
27
+ def test_delete
28
+ mc = mock()
29
+ mc.expects(:set_auth)
30
+ mc.expects(:delete).with("http://api.talis.com/stores/testing/items/1/2/3")
31
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
32
+ store.delete_item("http://api.talis.com/stores/testing/items/1/2/3")
33
+ end
34
+
35
+ def test_delete_with_relative_uri
36
+ mc = mock()
37
+ mc.expects(:set_auth)
38
+ mc.expects(:delete).with("http://api.talis.com/stores/testing/items/1/2/3")
39
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
40
+ store.delete_item("/items/1/2/3")
41
+ end
42
+
43
+ def test_get_item
44
+ mc = mock()
45
+ mc.expects(:set_auth)
46
+ mc.expects(:get).with("http://api.talis.com/stores/testing/items/1/2/3", anything, anything).returns( HTTP::Message.new_response("data") )
47
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
48
+ resp = store.get_item("/items/1/2/3")
49
+ assert_equal(true, resp != nil)
50
+ end
51
+
52
+ def test_get_item_with_conditional_get
53
+ mc = mock()
54
+ mc.expects(:set_auth)
55
+ mc.expects(:get).with("http://api.talis.com/stores/testing/items/1/2/3", nil, {"If-None-Match" => "abcdef"}).returns( HTTP::Message.new_response("data") )
56
+
57
+ etags = Pho::Etags.new
58
+ etags.add("http://api.talis.com/stores/testing/items/1/2/3", "abcdef")
59
+
60
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
61
+ resp = store.get_item("/items/1/2/3", etags)
62
+ assert_equal(true, resp != nil)
63
+ end
64
+
65
+ def test_get_item_with_if_match
66
+ mc = mock()
67
+ mc.expects(:set_auth)
68
+ mc.expects(:get).with("http://api.talis.com/stores/testing/items/1/2/3", nil, {"If-Match" => "abcdef"}).returns( HTTP::Message.new_response("data") )
69
+
70
+ etags = Pho::Etags.new
71
+ etags.add("http://api.talis.com/stores/testing/items/1/2/3", "abcdef")
72
+
73
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
74
+ resp = store.get_item("/items/1/2/3", etags, :ifmatch)
75
+ assert_equal(true, resp != nil)
76
+
77
+ end
78
+
79
+ def test_get_item_with_if_none_match_and_modified
80
+ r = HTTP::Message.new_response("data")
81
+ r.header["ETag"] = "zebra"
82
+
83
+ mc = mock()
84
+ mc.expects(:set_auth)
85
+ mc.expects(:get).with("http://api.talis.com/stores/testing/items/1/2/3", nil, {"If-None-Match" => "abcdef"}).returns( r )
86
+
87
+ etags = Pho::Etags.new
88
+ etags.add("http://api.talis.com/stores/testing/items/1/2/3", "abcdef")
89
+
90
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
91
+ resp = store.get_item("/items/1/2/3", etags)
92
+ assert_equal(true, resp != nil)
93
+ assert_equal("zebra", etags.get("http://api.talis.com/stores/testing/items/1/2/3"))
94
+ end
95
+
96
+ end
@@ -0,0 +1,38 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'pho'
3
+ require 'test/unit'
4
+ require 'yaml'
5
+ class EtagsTest < Test::Unit::TestCase
6
+
7
+ def test_it()
8
+
9
+ io = StringIO.new("---\n- http://www.example.org : '12345'")
10
+ etags = Pho::Etags.new(io)
11
+
12
+ assert_equal(true, etags.has_tag?("http://www.example.org") )
13
+ assert_equal("12345", etags.get("http://www.example.org") )
14
+
15
+ etags.add("http://www.example.com/foo", "abc")
16
+ assert_equal(false, etags.saved)
17
+
18
+ etags.save()
19
+
20
+ end
21
+
22
+ def test_overwrite()
23
+ etags = Pho::Etags.new()
24
+ etags.add("http://www.example.org", "etag")
25
+ assert_equal("etag", etags.get("http://www.example.org") )
26
+ etags.add("http://www.example.org", "etag_updated")
27
+ assert_equal("etag_updated", etags.get("http://www.example.org") )
28
+ end
29
+
30
+ def test_add_from_response()
31
+ response = HTTP::Message.new_response("description")
32
+ response.header["ETag"] = "abcdef"
33
+ etags = Pho::Etags.new()
34
+ etags.add_from_response("http://www.example.org", response)
35
+ assert_equal("abcdef", etags.get("http://www.example.org") )
36
+ end
37
+
38
+ end
@@ -0,0 +1,59 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'pho'
3
+ require 'test/unit'
4
+ require 'mocha'
5
+
6
+ class JobControlTest < Test::Unit::TestCase
7
+
8
+ def test_build_job_request
9
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
10
+ job_req = store.build_job_request(Time.now, "http://www.example.org/ns/jobtype", "test label")
11
+
12
+ assert_equal(true, job_req.index( "<rdfs:label>test label</rdfs:label>") != nil )
13
+ assert_equal(true, job_req.index( "rdf:resource=\"""http://www.example.org/ns/jobtype\"""/>") != nil )
14
+ end
15
+
16
+ def set_expectations(url, mc, jobtype, label)
17
+ mc.expects(:set_auth)
18
+ mc.expects(:post).with() { |passedurl, data, headers|
19
+ assert_equal("#{url}/jobs", passedurl)
20
+ assert_equal("application/rdf+xml", headers["Content-Type"])
21
+
22
+ assert_equal(true, data.index( "<rdfs:label>#{label}</rdfs:label>") != nil )
23
+ assert_equal(true, data.index( "rdf:resource=\"""#{jobtype}\"""/>") != nil )
24
+ true
25
+ }
26
+ end
27
+
28
+ def test_submit_job
29
+ mc = mock()
30
+ set_expectations("http://api.talis.com/stores/testing", mc, "http://www.example.org/ns/jobtype", "test label" )
31
+
32
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
33
+ job_req = store.submit_job("http://www.example.org/ns/jobtype", "test label")
34
+
35
+ end
36
+
37
+ def test_reset
38
+ mc = mock()
39
+ set_expectations("http://api.talis.com/stores/testing", mc, Pho::JOB_RESET, "Reset my store" )
40
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
41
+ job_req = store.reset()
42
+ end
43
+
44
+ def test_reindex
45
+ mc = mock()
46
+ set_expectations("http://api.talis.com/stores/testing", mc, Pho::JOB_REINDEX, "Reindex my store" )
47
+
48
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
49
+ job_req = store.reindex()
50
+ end
51
+
52
+ def test_snapshot
53
+ mc = mock()
54
+ set_expectations("http://api.talis.com/stores/testing", mc, Pho::JOB_SNAPSHOT, "Snapshot my store" )
55
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
56
+ job_req = store.snapshot()
57
+ end
58
+
59
+ end
@@ -0,0 +1,124 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'pho'
3
+ require 'test/unit'
4
+ require 'mocha'
5
+
6
+ class MetaboxTest < Test::Unit::TestCase
7
+
8
+ def test_constructor
9
+ mc = mock()
10
+ mc.expects(:set_auth).with("http://api.talis.com/stores/testing", "user", "pass")
11
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
12
+ assert_equal(mc, store.client)
13
+ assert_equal("http://api.talis.com/stores/testing", store.storeuri)
14
+ assert_equal("user", store.username)
15
+ end
16
+
17
+ def test_store_data
18
+ mc = mock()
19
+ mc.expects(:set_auth)
20
+ mc.expects(:post).with("http://api.talis.com/stores/testing/meta", "data", {"Content-Type" => "application/rdf+xml"} )
21
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
22
+ store.store_data("data")
23
+ end
24
+
25
+ def test_store_file
26
+ mc = mock()
27
+ mc.expects(:set_auth)
28
+ mc.expects(:post).with("http://api.talis.com/stores/testing/meta", "data", {"Content-Type" => "application/rdf+xml"} )
29
+
30
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
31
+ io = StringIO.new("data")
32
+ store.store_file( io )
33
+ assert_equal(true, io.closed?)
34
+ end
35
+
36
+ def test_store_url
37
+ mc = mock()
38
+ mc.expects(:set_auth)
39
+ mc.expects(:get).with("http://www.example.org", nil, {"Accept" => "application/rdf+xml"}).returns( HTTP::Message.new_response("data") )
40
+ mc.expects(:post).with("http://api.talis.com/stores/testing/meta", "data", {"Content-Type" => "application/rdf+xml"} )
41
+
42
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
43
+ store.store_url( "http://www.example.org" )
44
+ end
45
+
46
+ def test_describe_with_default_mimetype
47
+ mc = mock()
48
+ mc.expects(:set_auth)
49
+ mc.expects(:get).with("http://api.talis.com/stores/testing/meta", {"about" => "http://www.example.org"}, {"Accept" => "application/rdf+xml"}).returns(
50
+ HTTP::Message.new_response("description") )
51
+
52
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
53
+ response = store.describe("http://www.example.org")
54
+ assert_equal("description", response.content)
55
+ end
56
+
57
+ def test_describe_with_json
58
+ mc = mock()
59
+ mc.expects(:set_auth)
60
+ mc.expects(:get).with("http://api.talis.com/stores/testing/meta", {"about" => "http://www.example.org"}, {"Accept" => "application/json"}).returns(
61
+ HTTP::Message.new_response("description"))
62
+
63
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
64
+ response = store.describe("http://www.example.org", "application/json")
65
+ assert_equal("description", response.content)
66
+ end
67
+
68
+ def test_describe_with_conditional_get
69
+ mc = mock()
70
+ mc.expects(:set_auth)
71
+ mc.expects(:get).with("http://api.talis.com/stores/testing/meta", {"about" => "http://www.example.org"},
72
+ {"Accept" => "application/rdf+xml", "If-None-Match" => "1234"}).returns( HTTP::Message.new_response("description") )
73
+
74
+ etags = Pho::Etags.new()
75
+ etags.add("http://api.talis.com/stores/testing/meta?about=http://www.example.org", "1234")
76
+
77
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
78
+ response = store.describe("http://www.example.org", "application/rdf+xml", etags)
79
+ assert_equal("description", response.content)
80
+
81
+ end
82
+
83
+ def test_describe_with_if_match
84
+ mc = mock()
85
+ mc.expects(:set_auth)
86
+ mc.expects(:get).with("http://api.talis.com/stores/testing/meta", {"about" => "http://www.example.org"},
87
+ {"Accept" => "application/rdf+xml", "If-Match" => "1234"}).returns( HTTP::Message.new_response("description") )
88
+
89
+ etags = Pho::Etags.new()
90
+ etags.add("http://api.talis.com/stores/testing/meta?about=http://www.example.org", "1234")
91
+
92
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
93
+ response = store.describe("http://www.example.org", "application/rdf+xml", etags, :ifmatch)
94
+ assert_equal("description", response.content)
95
+
96
+ end
97
+
98
+ def test_describe_with_if_none_match_and_changed
99
+ r = HTTP::Message.new_response("description")
100
+ r.header["ETag"] = "abcdef"
101
+
102
+ mc = mock()
103
+ mc.expects(:set_auth)
104
+ mc.expects(:get).with("http://api.talis.com/stores/testing/meta", {"about" => "http://www.example.org"},
105
+ {"Accept" => "application/rdf+xml", "If-None-Match" => "1234"}).returns( r )
106
+
107
+ etags = Pho::Etags.new
108
+ etags.add("http://api.talis.com/stores/testing/meta?about=http://www.example.org", "1234")
109
+
110
+ #etags = mock()
111
+ #etags.stub_everything
112
+ #etags.expects(:has_tag?).with("http://api.talis.com/stores/testing/meta?about=http://www.example.org").returns(true)
113
+ #etags.expects(:get).with("http://api.talis.com/stores/testing/meta?about=http://www.example.org").returns("1234")
114
+ #etags.expects(:add).with("http://api.talis.com/stores/testing/meta?about=http://www.example.org", "abcdef")
115
+
116
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
117
+ response = store.describe("http://www.example.org", "application/rdf+xml", etags)
118
+
119
+ assert_equal("description", response.content)
120
+ assert_equal("abcdef", etags.get("http://api.talis.com/stores/testing/meta?about=http://www.example.org"))
121
+
122
+ end
123
+
124
+ end
@@ -0,0 +1,127 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'pho'
3
+ require 'test/unit'
4
+ require 'mocha'
5
+
6
+ class RDFCollectionTest < Test::Unit::TestCase
7
+
8
+ def setup()
9
+ 10.times do |i|
10
+ file = File.new( File.join("/tmp", "#{i}.rdf"), "w" )
11
+ file.write("RDF#{i}")
12
+ file.close()
13
+ end
14
+ 4.times do |i|
15
+ file = File.new( File.join("/tmp", "#{i}.ok"), "w" )
16
+ file.write("OK")
17
+ file.close()
18
+ end
19
+ 3.times do |i|
20
+ num = 4 + i
21
+ file = File.new( File.join("/tmp", "#{num}.fail"), "w" )
22
+ file.write("FAIL")
23
+ file.close()
24
+ end
25
+ end
26
+
27
+ def teardown()
28
+ Dir.glob("/tmp/*.rdf") do |file|
29
+ File.delete(file)
30
+ end
31
+ Dir.glob("/tmp/*.ok") do |file|
32
+ File.delete(file)
33
+ end
34
+ Dir.glob("/tmp/*.fail") do |file|
35
+ File.delete(file)
36
+ end
37
+ end
38
+
39
+ def test_get_fail_file_for()
40
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
41
+ collection = Pho::RDFCollection.new(store, "/tmp")
42
+
43
+ assert_equal("foo.fail", collection.get_fail_file_for("foo.rdf") )
44
+ end
45
+
46
+ def test_get_ok_file_for()
47
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
48
+ collection = Pho::RDFCollection.new(store, "/tmp")
49
+
50
+ assert_equal("foo.ok", collection.get_ok_file_for("foo.rdf") )
51
+ end
52
+
53
+ def test_successes()
54
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
55
+ collection = Pho::RDFCollection.new(store, "/tmp")
56
+
57
+ success = collection.successes()
58
+ success.sort!
59
+ assert_equal(4, success.size)
60
+ assert_equal("/tmp/0.rdf", success[0])
61
+ assert_equal("/tmp/1.rdf", success[1])
62
+ assert_equal("/tmp/2.rdf", success[2])
63
+ assert_equal("/tmp/3.rdf", success[3])
64
+ end
65
+
66
+ def test_failures()
67
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
68
+ collection = Pho::RDFCollection.new(store, "/tmp")
69
+
70
+ fails = collection.failures()
71
+ fails.sort!
72
+ assert_equal(3, fails.size)
73
+ assert_equal("/tmp/4.rdf", fails[0])
74
+ assert_equal("/tmp/5.rdf", fails[1])
75
+ assert_equal("/tmp/6.rdf", fails[2])
76
+ end
77
+
78
+ def test_new_files()
79
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
80
+ collection = Pho::RDFCollection.new(store, "/tmp")
81
+
82
+ newfiles = collection.new_files()
83
+ newfiles.sort!
84
+ assert_equal(3, newfiles.size)
85
+ assert_equal("/tmp/7.rdf", newfiles[0])
86
+ assert_equal("/tmp/8.rdf", newfiles[1])
87
+ assert_equal("/tmp/9.rdf", newfiles[2])
88
+
89
+ end
90
+
91
+ def test_store()
92
+ mc = mock()
93
+ mc.stub_everything()
94
+ mc.expects(:post).with("http://api.talis.com/stores/testing/meta", "RDF7", {"Content-Type" => "application/rdf+xml"})
95
+ mc.expects(:post).with("http://api.talis.com/stores/testing/meta", "RDF8", {"Content-Type" => "application/rdf+xml"})
96
+ mc.expects(:post).with("http://api.talis.com/stores/testing/meta", "RDF9", {"Content-Type" => "application/rdf+xml"})
97
+
98
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass", mc)
99
+ collection = Pho::RDFCollection.new(store, "/tmp")
100
+ collection.store()
101
+ end
102
+
103
+ def test_reset()
104
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
105
+ collection = Pho::RDFCollection.new(store, "/tmp")
106
+
107
+ collection.reset()
108
+ newfiles = collection.new_files()
109
+ assert_equal(10, newfiles.size)
110
+ end
111
+
112
+ def test_list()
113
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
114
+ collection = Pho::RDFCollection.new(store, "/tmp")
115
+
116
+ files = collection.list()
117
+ assert_equal(10, files.size)
118
+ end
119
+
120
+ def test_summary()
121
+ store = Pho::Store.new("http://api.talis.com/stores/testing", "user", "pass")
122
+ collection = Pho::RDFCollection.new(store, "/tmp")
123
+
124
+ collection.summary()
125
+ end
126
+
127
+ end