pione 0.2.1 → 0.2.2

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.
Files changed (214) hide show
  1. data/.gitignore +16 -13
  2. data/.travis.yml +1 -1
  3. data/History.txt +11 -0
  4. data/Rakefile +13 -0
  5. data/bin/pione-package +5 -0
  6. data/example/AbstractRule/package.yml +6 -0
  7. data/example/AbstractRule/scenario/a/output/message.txt +1 -0
  8. data/example/AbstractRule/scenario/a/scenario.yml +4 -0
  9. data/example/AbstractRule/scenario/b/output/message.txt +1 -0
  10. data/example/AbstractRule/scenario/b/scenario.yml +4 -0
  11. data/example/AbstractRule/scenario/c/output/message.txt +1 -0
  12. data/example/AbstractRule/scenario/c/scenario.yml +4 -0
  13. data/example/HelloWorld/package.yml +5 -1
  14. data/example/HelloWorld/scenario/scenario.yml +2 -1
  15. data/example/LoopByTouch/package.yml +4 -1
  16. data/example/MakePair/package.yml +6 -0
  17. data/example/MakePair/scenario/{input → case1/input}/1.i +0 -0
  18. data/example/MakePair/scenario/{input → case1/input}/2.i +0 -0
  19. data/example/MakePair/scenario/{input → case1/input}/3.i +0 -0
  20. data/example/MakePair/scenario/{input → case1/input}/4.i +0 -0
  21. data/example/MakePair/scenario/{input → case1/input}/5.i +0 -0
  22. data/example/MakePair/scenario/{output → case1/output}/comb-1-2.pair +0 -0
  23. data/example/MakePair/scenario/{output → case1/output}/comb-1-3.pair +0 -0
  24. data/example/MakePair/scenario/{output → case1/output}/comb-1-4.pair +0 -0
  25. data/example/MakePair/scenario/{output → case1/output}/comb-1-5.pair +0 -0
  26. data/example/MakePair/scenario/{output → case1/output}/comb-2-3.pair +0 -0
  27. data/example/MakePair/scenario/{output → case1/output}/comb-2-4.pair +0 -0
  28. data/example/MakePair/scenario/{output → case1/output}/comb-2-5.pair +0 -0
  29. data/example/MakePair/scenario/{output → case1/output}/comb-3-4.pair +0 -0
  30. data/example/MakePair/scenario/{output → case1/output}/comb-3-5.pair +0 -0
  31. data/example/MakePair/scenario/{output → case1/output}/comb-4-5.pair +0 -0
  32. data/example/MakePair/scenario/{output → case1/output}/perm-1-2.pair +0 -0
  33. data/example/MakePair/scenario/{output → case1/output}/perm-1-3.pair +0 -0
  34. data/example/MakePair/scenario/{output → case1/output}/perm-1-4.pair +0 -0
  35. data/example/MakePair/scenario/{output → case1/output}/perm-1-5.pair +0 -0
  36. data/example/MakePair/scenario/{output → case1/output}/perm-2-1.pair +0 -0
  37. data/example/MakePair/scenario/{output → case1/output}/perm-2-3.pair +0 -0
  38. data/example/MakePair/scenario/{output → case1/output}/perm-2-4.pair +0 -0
  39. data/example/MakePair/scenario/{output → case1/output}/perm-2-5.pair +0 -0
  40. data/example/MakePair/scenario/{output → case1/output}/perm-3-1.pair +0 -0
  41. data/example/MakePair/scenario/{output → case1/output}/perm-3-2.pair +0 -0
  42. data/example/MakePair/scenario/{output → case1/output}/perm-3-4.pair +0 -0
  43. data/example/MakePair/scenario/{output → case1/output}/perm-3-5.pair +0 -0
  44. data/example/MakePair/scenario/{output → case1/output}/perm-4-1.pair +0 -0
  45. data/example/MakePair/scenario/{output → case1/output}/perm-4-2.pair +0 -0
  46. data/example/MakePair/scenario/{output → case1/output}/perm-4-3.pair +0 -0
  47. data/example/MakePair/scenario/{output → case1/output}/perm-4-5.pair +0 -0
  48. data/example/MakePair/scenario/{output → case1/output}/perm-5-1.pair +0 -0
  49. data/example/MakePair/scenario/{output → case1/output}/perm-5-2.pair +0 -0
  50. data/example/MakePair/scenario/{output → case1/output}/perm-5-3.pair +0 -0
  51. data/example/MakePair/scenario/{output → case1/output}/perm-5-4.pair +0 -0
  52. data/example/MakePair/scenario/{output → case1/output}/succ-1-2.pair +0 -0
  53. data/example/MakePair/scenario/{output → case1/output}/succ-2-3.pair +0 -0
  54. data/example/MakePair/scenario/{output → case1/output}/succ-3-4.pair +0 -0
  55. data/example/MakePair/scenario/{output → case1/output}/succ-4-5.pair +0 -0
  56. data/example/MakePair/scenario/case1/scenario.yml +42 -0
  57. data/example/MakePair/scenario/case2/input/10.i +0 -0
  58. data/example/MakePair/scenario/case2/input/11.i +0 -0
  59. data/example/MakePair/scenario/case2/input/9.i +0 -0
  60. data/example/MakePair/scenario/case2/output/comb-10-11.pair +0 -0
  61. data/example/MakePair/scenario/case2/output/comb-9-10.pair +0 -0
  62. data/example/MakePair/scenario/case2/output/comb-9-11.pair +0 -0
  63. data/example/MakePair/scenario/case2/output/perm-10-11.pair +0 -0
  64. data/example/MakePair/scenario/case2/output/perm-10-9.pair +0 -0
  65. data/example/MakePair/scenario/case2/output/perm-11-10.pair +0 -0
  66. data/example/MakePair/scenario/case2/output/perm-11-9.pair +0 -0
  67. data/example/MakePair/scenario/case2/output/perm-9-10.pair +0 -0
  68. data/example/MakePair/scenario/case2/output/perm-9-11.pair +0 -0
  69. data/example/MakePair/scenario/case2/output/succ-10-11.pair +0 -0
  70. data/example/MakePair/scenario/case2/output/succ-9-10.pair +0 -0
  71. data/example/MakePair/scenario/case2/scenario.yml +17 -0
  72. data/example/MakePair/scenario/case3/input/1.i +0 -0
  73. data/example/MakePair/scenario/case3/input/3.i +0 -0
  74. data/example/MakePair/scenario/case3/input/5.i +0 -0
  75. data/example/MakePair/scenario/case3/input/7.i +0 -0
  76. data/example/MakePair/scenario/case3/input/9.i +0 -0
  77. data/example/MakePair/scenario/case3/output/comb-1-3.pair +0 -0
  78. data/example/MakePair/scenario/case3/output/comb-1-5.pair +0 -0
  79. data/example/MakePair/scenario/case3/output/comb-1-7.pair +0 -0
  80. data/example/MakePair/scenario/case3/output/comb-1-9.pair +0 -0
  81. data/example/MakePair/scenario/case3/output/comb-3-5.pair +0 -0
  82. data/example/MakePair/scenario/case3/output/comb-3-7.pair +0 -0
  83. data/example/MakePair/scenario/case3/output/comb-3-9.pair +0 -0
  84. data/example/MakePair/scenario/case3/output/comb-5-7.pair +0 -0
  85. data/example/MakePair/scenario/case3/output/comb-5-9.pair +0 -0
  86. data/example/MakePair/scenario/case3/output/comb-7-9.pair +0 -0
  87. data/example/MakePair/scenario/case3/output/perm-1-3.pair +0 -0
  88. data/example/MakePair/scenario/case3/output/perm-1-5.pair +0 -0
  89. data/example/MakePair/scenario/case3/output/perm-1-7.pair +0 -0
  90. data/example/MakePair/scenario/case3/output/perm-1-9.pair +0 -0
  91. data/example/MakePair/scenario/case3/output/perm-3-1.pair +0 -0
  92. data/example/MakePair/scenario/case3/output/perm-3-5.pair +0 -0
  93. data/example/MakePair/scenario/case3/output/perm-3-7.pair +0 -0
  94. data/example/MakePair/scenario/case3/output/perm-3-9.pair +0 -0
  95. data/example/MakePair/scenario/case3/output/perm-5-1.pair +0 -0
  96. data/example/MakePair/scenario/case3/output/perm-5-3.pair +0 -0
  97. data/example/MakePair/scenario/case3/output/perm-5-7.pair +0 -0
  98. data/example/MakePair/scenario/case3/output/perm-5-9.pair +0 -0
  99. data/example/MakePair/scenario/case3/output/perm-7-1.pair +0 -0
  100. data/example/MakePair/scenario/case3/output/perm-7-3.pair +0 -0
  101. data/example/MakePair/scenario/case3/output/perm-7-5.pair +0 -0
  102. data/example/MakePair/scenario/case3/output/perm-7-9.pair +0 -0
  103. data/example/MakePair/scenario/case3/output/perm-9-1.pair +0 -0
  104. data/example/MakePair/scenario/case3/output/perm-9-3.pair +0 -0
  105. data/example/MakePair/scenario/case3/output/perm-9-5.pair +0 -0
  106. data/example/MakePair/scenario/case3/output/perm-9-7.pair +0 -0
  107. data/example/MakePair/scenario/case3/scenario.yml +39 -0
  108. data/example/PegasusWMS/Merge/Merge.pione +21 -0
  109. data/example/PegasusWMS/Merge/package.yml +2 -0
  110. data/example/PegasusWMS/Pipeline/Pipeline.pione +20 -0
  111. data/example/PegasusWMS/Pipeline/package.yml +2 -0
  112. data/example/PegasusWMS/Split/Split.pione +27 -0
  113. data/example/PegasusWMS/Split/package.yml +2 -0
  114. data/example/ScoreAggregation/package.yml +4 -0
  115. data/example/ScoreAggregation/scenario/case1/scenario.yml +27 -1
  116. data/example/SerialProcessing/package.yml +5 -1
  117. data/example/SerialProcessing/scenario/scenario.yml +10 -0
  118. data/lib/pione.rb +20 -71
  119. data/lib/pione/agent.rb +17 -0
  120. data/lib/pione/agent/basic-agent.rb +2 -4
  121. data/lib/pione/command.rb +1 -0
  122. data/lib/pione/command/option.rb +4 -1
  123. data/lib/pione/command/pione-package.rb +97 -0
  124. data/lib/pione/command/pione-task-worker.rb +11 -7
  125. data/lib/pione/component.rb +5 -0
  126. data/lib/pione/component/document.rb +22 -5
  127. data/lib/pione/component/package-archiver.rb +92 -0
  128. data/lib/pione/component/package-expander.rb +37 -0
  129. data/lib/pione/component/package-filename.rb +38 -0
  130. data/lib/pione/component/package-reader.rb +276 -0
  131. data/lib/pione/component/package.rb +50 -162
  132. data/lib/pione/front.rb +14 -0
  133. data/lib/pione/location.rb +5 -0
  134. data/lib/pione/location/basic-location.rb +47 -274
  135. data/lib/pione/location/data-location.rb +328 -0
  136. data/lib/pione/location/dropbox-location.rb +30 -7
  137. data/lib/pione/location/exception.rb +38 -0
  138. data/lib/pione/location/ftp-location.rb +24 -13
  139. data/lib/pione/location/git-repository-location.rb +153 -0
  140. data/lib/pione/location/http-location.rb +65 -0
  141. data/lib/pione/location/https-location.rb +37 -0
  142. data/lib/pione/location/local-location.rb +24 -5
  143. data/lib/pione/parser.rb +14 -0
  144. data/lib/pione/patch.rb +10 -0
  145. data/lib/pione/patch/drb-patch.rb +2 -2
  146. data/lib/pione/relay.rb +11 -0
  147. data/lib/pione/system/file-cache.rb +1 -1
  148. data/lib/pione/system/global.rb +15 -0
  149. data/lib/pione/tuple-space.rb +11 -0
  150. data/lib/pione/tuple-space/tuple-space-server.rb +1 -1
  151. data/lib/pione/util.rb +1 -0
  152. data/lib/pione/util/error-report.rb +7 -0
  153. data/lib/pione/util/misc.rb +2 -2
  154. data/lib/pione/util/zip.rb +60 -0
  155. data/lib/pione/version.rb +1 -1
  156. data/pione.gemspec +5 -1
  157. data/test/agent/spec_rule-provider.rb +2 -2
  158. data/test/command/spec_pione-package.rb +15 -0
  159. data/test/component/spec_document.rb +2 -2
  160. data/test/component/spec_package-archiver.rb +27 -0
  161. data/test/component/spec_package-expander.rb +11 -0
  162. data/test/component/spec_package-filename.rb +79 -0
  163. data/test/component/spec_package-reader.rb +100 -0
  164. data/test/component/spec_package.rb +50 -33
  165. data/test/location/http-behavior.rb +59 -0
  166. data/test/location/location-behavior.rb +8 -0
  167. data/test/location/spec_basic-location.rb +5 -1
  168. data/test/location/spec_git-repository-location.rb +143 -0
  169. data/test/location/spec_http-location.rb +28 -0
  170. data/test/location/spec_http-location/a.txt +1 -0
  171. data/test/location/spec_http-location/b.txt +1 -0
  172. data/test/location/spec_http-location/c.txt +1 -0
  173. data/test/location/spec_http-location/dir/d.txt +1 -0
  174. data/test/location/spec_https-location.rb +37 -0
  175. data/test/rule-handler/spec_flow-handler.rb +1 -1
  176. data/test/rule-handler/spec_update-criteria.rb +1 -1
  177. data/test/test-data/package/HelloWorld+v0.1.0.ppg +0 -0
  178. data/test/test-data/package/HelloWorld-gitrepos.zip +0 -0
  179. data/test/test-data/package/HelloWorld/HelloWorld.pione +5 -0
  180. data/test/test-data/package/HelloWorld/package.yml +6 -0
  181. data/test/test-data/package/HelloWorld/scenario/output/message.txt +1 -0
  182. data/test/test-data/package/HelloWorld/scenario/scenario.yml +3 -0
  183. data/test/test-data/package/TestPackage1+v0.1.0.ppg +0 -0
  184. data/test/{component/spec_package/TestPackage → test-data/package/TestPackage1}/Test.pione +3 -1
  185. data/test/test-data/package/TestPackage1/bin/count +11 -0
  186. data/test/test-data/package/TestPackage1/package.yml +9 -0
  187. data/test/{component/spec_package/TestPackage → test-data/package/TestPackage1}/scenario/case1/input/1.txt +0 -0
  188. data/test/test-data/package/TestPackage1/scenario/case1/output/1.count +1 -0
  189. data/test/test-data/package/TestPackage1/scenario/case1/scenario.yml +6 -0
  190. data/test/test-data/package/TestPackage1/scenario/case2/input/1.txt +2 -0
  191. data/test/test-data/package/TestPackage1/scenario/case2/input/2.txt +1 -0
  192. data/test/test-data/package/TestPackage1/scenario/case2/input/3.txt +3 -0
  193. data/test/test-data/package/TestPackage1/scenario/case2/output/1.count +1 -0
  194. data/test/test-data/package/TestPackage1/scenario/case2/output/2.count +1 -0
  195. data/test/test-data/package/TestPackage1/scenario/case2/output/3.count +1 -0
  196. data/test/test-data/package/TestPackage1/scenario/case2/scenario.yml +10 -0
  197. data/test/test-data/package/TestPackage1/scenario/case3/input/a.txt +1 -0
  198. data/test/test-data/package/TestPackage1/scenario/case3/input/b.txt +1 -0
  199. data/test/test-data/package/TestPackage1/scenario/case3/output/a.count +1 -0
  200. data/test/test-data/package/TestPackage1/scenario/case3/output/b.count +1 -0
  201. data/test/test-data/package/TestPackage1/scenario/case3/scenario.yml +8 -0
  202. data/test/test-util.rb +10 -146
  203. data/test/test-util/command.rb +53 -0
  204. data/test/test-util/package.rb +9 -0
  205. data/test/test-util/parser.rb +45 -0
  206. data/test/test-util/transformer.rb +50 -0
  207. data/test/test-util/webserver.rb +43 -0
  208. data/test/util/spec_error-report.rb +12 -3
  209. data/test/util/spec_zip.rb +36 -0
  210. metadata +282 -54
  211. data/example/MakePair/scenario/scenario.yml +0 -1
  212. data/test/component/spec_package/TestPackage/bin/count +0 -3
  213. data/test/component/spec_package/TestPackage/package.yml +0 -7
  214. data/test/component/spec_package/TestPackage/scenario/case1/scenario.yml +0 -1
@@ -8,8 +8,8 @@ module Pione
8
8
  def ignore_exception(&b)
9
9
  begin
10
10
  b.call
11
- rescue Exception
12
- # do nothing
11
+ rescue Exception => e
12
+ ErrorReport.warn("the error ignored", nil, e, __FILE__, __LINE__)
13
13
  end
14
14
  end
15
15
 
@@ -0,0 +1,60 @@
1
+ module Pione
2
+ module Util
3
+ module Zip
4
+ class << self
5
+ # Create a zip archive of the location.
6
+ #
7
+ # @param src [DataLocation]
8
+ # the source directory location
9
+ # @param archive [DataLocation]
10
+ # the archive location
11
+ def compress(src, archive)
12
+ # src should be a directory
13
+ raise ArgumentError.new(src) unless src.directory?
14
+
15
+ # make local path
16
+ _src = src.local
17
+ _archive = Location[Temppath.create]
18
+
19
+ # compress
20
+ ::Zip::Archive.open(_archive.path.to_s, ::Zip::CREATE) do |ar|
21
+ _src.rel_entries(rec: true).each do |relpath|
22
+ relpath = relpath.to_s
23
+ location = _src + relpath
24
+ if location.directory?
25
+ ar.add_dir(relpath)
26
+ else
27
+ ar.add_file(relpath, location.path.to_s)
28
+ end
29
+ end
30
+ end
31
+
32
+ # upload archive
33
+ _archive.move(archive)
34
+ end
35
+
36
+ # Expand the archive into the destination directory.
37
+ #
38
+ # @param archive [DataLocation]
39
+ # the archive location
40
+ # @param dest [DataLocation]
41
+ # the destination directory location
42
+ def uncompress(archive, dest)
43
+ _archive = archive.local
44
+ _dest = dest.local
45
+ ::Zip::Archive.open(_archive.path.to_s) do |ar|
46
+ ar.each do |f|
47
+ path = _dest + f.name
48
+ if f.directory?
49
+ path.mkdir
50
+ else
51
+ f.read(8192) {|chunk| path.append(chunk)}
52
+ end
53
+ end
54
+ end
55
+ _dest.move(dest)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,4 +1,4 @@
1
1
  module Pione
2
2
  # version of pione
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
@@ -32,7 +32,7 @@ Gem::Specification.new do |gem|
32
32
  gem.add_dependency "hamster", "~> 0.4.3"
33
33
  gem.add_dependency "naming", "~> 0.1.0"
34
34
  gem.add_dependency "forwardablex", "~> 0.1.4"
35
- gem.add_dependency "temppath", "~> 0.1.1"
35
+ gem.add_dependency "temppath", "~> 0.2.0"
36
36
  gem.add_dependency "ruby-xes", "~> 0.1.0"
37
37
  gem.add_dependency "sys-uname", "~> 0.9.2"
38
38
  gem.add_dependency "simple-identity", "~> 0.1.1"
@@ -40,6 +40,10 @@ Gem::Specification.new do |gem|
40
40
  gem.add_dependency "sys-cpu", "~> 0.7.1"
41
41
  gem.add_dependency "structx", "~> 0.1.0"
42
42
  gem.add_dependency "syslog-logger", "~> 1.6.8"
43
+ gem.add_dependency "zipruby", "~> 0.3.6"
44
+ gem.add_dependency "retriable", "~> 1.3.3"
45
+ gem.add_dependency "childprocess", "~> 0.3.9"
46
+ gem.add_dependency "git", "~> 1.2.5"
43
47
 
44
48
  # for locations
45
49
  gem.add_dependency "dropbox-sdk", "~> 1.5.1"
@@ -4,7 +4,7 @@ describe "Pione::Agent::RuleProvider" do
4
4
  before do
5
5
  @ts = create_tuple_space_server
6
6
  @agent = Agent[:rule_provider].new(@ts)
7
- doc = Component::Document.load(<<-DOCUMENT)
7
+ doc = Component::Document.parse(<<-DOCUMENT)
8
8
  Rule A
9
9
  input '*.a'
10
10
  output '{$I[1]}.result'
@@ -35,7 +35,7 @@ describe "Pione::Agent::RuleProvider" do
35
35
  end
36
36
 
37
37
  it "should add a rule" do
38
- doc = Component::Document.load(<<-DOCUMENT)
38
+ doc = Component::Document.parse(<<-DOCUMENT)
39
39
  Rule C
40
40
  input '*.c'
41
41
  output '{$I[1]}.result'
@@ -0,0 +1,15 @@
1
+ require_relative "../test-util"
2
+
3
+ describe "Pione::Command::PionePackage" do
4
+ it "should build PIONE package" do
5
+ package_location = TestUtil::Package.get("TestPackage1")
6
+ output_location = Location[Temppath.mkdir]
7
+ res = TestUtil::Command.succeed do
8
+ Command::PionePackage.run ["--build", "-o", output_location.path.to_s, package_location.path.to_s]
9
+ end
10
+ pkg = output_location + "TestPackage1+v0.1.0.ppg"
11
+ pkg.should.exist
12
+ pkg.size.should > 0
13
+ end
14
+ end
15
+
@@ -17,7 +17,7 @@ describe 'Pione::Component::Document' do
17
17
  end
18
18
 
19
19
  it 'should load a document from a string' do
20
- Component::Document.load(document_location.read).should == @document
20
+ Component::Document.parse(document_location.read).should == @document
21
21
  end
22
22
 
23
23
  it 'should load a document with package name' do
@@ -58,7 +58,7 @@ describe 'Pione::Component::Document' do
58
58
 
59
59
  it 'should raise variable binding error' do
60
60
  should.raise(VariableBindingError) do
61
- Component::Document.load <<-PIONE
61
+ Component::Document.parse <<-PIONE
62
62
  $X := 1
63
63
  $X := 2
64
64
  PIONE
@@ -0,0 +1,27 @@
1
+ require_relative '../test-util'
2
+
3
+ describe "Pione::Component::PackageArchiver" do
4
+ before do
5
+ @path = TestUtil::Package.get("TestPackage1")
6
+ end
7
+
8
+ it "should create archive file" do
9
+ out = Location[Temppath.mkdir]
10
+ Component::PackageArchiver.new(@path).archive(out)
11
+
12
+ # easy check
13
+ pkg = out + "TestPackage1+v0.1.0.ppg"
14
+ pkg.should.exist
15
+ pkg.should.file
16
+ pkg.size.should > 0
17
+
18
+ # structure check
19
+ Zip::Archive.open(pkg.path.to_s) do |ar|
20
+ ar.each do |file|
21
+ unless file.directory?
22
+ file.read.should == (@path + file.name).read
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../test-util'
2
+
3
+ describe "Pione::Component::PackageExpander" do
4
+ it "should expand archive package" do
5
+ location = TestUtil::TEST_PACKAGE_DIR + "TestPackage1+v0.1.0.ppg"
6
+ expanded = Location[Temppath.mkdir]
7
+ Component::PackageExpander.new(location).expand(expanded)
8
+ (expanded + "package.yml").should.exist
9
+ end
10
+ end
11
+
@@ -0,0 +1,79 @@
1
+ require_relative '../test-util'
2
+
3
+ shared "package filename" do
4
+ it "should parse the package filename" do
5
+ Component::PackageFilename.parse(@filename).tap do |fname|
6
+ fname.package_name.should == @package_name
7
+ fname.edition.should == @edition
8
+ fname.tag.should == @tag
9
+ fname.hash_id.should == @hash_id
10
+ end
11
+ end
12
+
13
+ it "should build package filename string" do
14
+ Component::PackageFilename.parse(@filename).to_s.should == @filename
15
+ end
16
+ end
17
+
18
+ describe "Pione::Component::PackageFilename" do
19
+ describe "package name + edition + tag + hash_id" do
20
+ before do
21
+ @filename = "Test(keita.yamaguchi@gmail.com)+test@d462c59.ppg"
22
+ @package_name = "Test"
23
+ @edition = "keita.yamaguchi@gmail.com"
24
+ @tag = "test"
25
+ @hash_id = "d462c59"
26
+ end
27
+
28
+ behaves_like "package filename"
29
+ end
30
+
31
+ describe "package name + 'origin' + tag + hash_id" do
32
+ before do
33
+ @filename = "Test+test@d462c59.ppg"
34
+ @package_name = "Test"
35
+ @edition = "origin"
36
+ @tag = "test"
37
+ @hash_id = "d462c59"
38
+ end
39
+
40
+ behaves_like "package filename"
41
+ end
42
+
43
+ describe "package name + tag + hash_id" do
44
+ before do
45
+ @filename = "Test+test@d462c59.ppg"
46
+ @package_name = "Test"
47
+ @edition = "origin"
48
+ @tag = "test"
49
+ @hash_id = "d462c59"
50
+ end
51
+
52
+ behaves_like "package filename"
53
+ end
54
+
55
+ describe "package name + tag" do
56
+ before do
57
+ @filename = "Test+test.ppg"
58
+ @package_name = "Test"
59
+ @edition = "origin"
60
+ @tag = "test"
61
+ @hash_id = nil
62
+ end
63
+
64
+ behaves_like "package filename"
65
+ end
66
+
67
+ describe "package name + hash id" do
68
+ before do
69
+ @filename = "Test@d462c59.ppg"
70
+ @package_name = "Test"
71
+ @edition = "origin"
72
+ @tag = nil
73
+ @hash_id = "d462c59"
74
+ end
75
+
76
+ behaves_like "package filename"
77
+ end
78
+ end
79
+
@@ -0,0 +1,100 @@
1
+ require_relative '../test-util'
2
+
3
+ $stdout = STDOUT
4
+ $stderr = STDERR
5
+
6
+ describe "Pione::Component::PackageReader" do
7
+ shared "package" do
8
+ it "should read the package and return it" do
9
+ Component::PackageReader.read(@location).should.kind_of Component::Package
10
+ end
11
+
12
+ it "should get package informations" do
13
+ package = Component::PackageReader.read(@location)
14
+ package.name.should == "HelloWorld"
15
+ end
16
+
17
+ it "should get scenarios" do
18
+ package = Component::PackageReader.read(@location)
19
+ package.name.should == "HelloWorld"
20
+ scenario = package.scenarios[0]
21
+ scenario.name.should == "HelloWorld"
22
+ scenario.inputs.should.empty
23
+ scenario.outputs[0].basename.should == "message.txt"
24
+
25
+ # case1 = package.scenarios[0]
26
+ # case1.name.should == "Case1"
27
+ # case1.inputs[0].basename.should == "1.txt"
28
+ # case2 = package.scenarios[1]
29
+ # case2.name.should == "Case2"
30
+ # case2.inputs[0].basename.should == "1.txt"
31
+ # case2.inputs[1].basename.should == "2.txt"
32
+ # case2.inputs[2].basename.should == "3.txt"
33
+ # case3 = package.scenarios[2]
34
+ # case3.name.should == "Case3"
35
+ # case3.inputs[0].basename.should == "a.txt"
36
+ # case3.inputs[1].basename.should == "b.txt"
37
+ end
38
+ end
39
+
40
+ shared "directory package" do
41
+ it "should read package directory" do
42
+ Component::PackageReader.new(@location).type.should == :directory
43
+ end
44
+ end
45
+
46
+ describe "directory package at local location" do
47
+ before do
48
+ @location = TestUtil::Package.get("HelloWorld")
49
+ end
50
+
51
+ behaves_like "package"
52
+ behaves_like "directory package"
53
+ end
54
+
55
+ describe "directory package at HTTP location" do
56
+ before do
57
+ @server = TestUtil::WebServer.start(TestUtil::TEST_PACKAGE_DIR)
58
+ @location = @server.root + "HelloWorld/"
59
+ end
60
+
61
+ after do
62
+ @server.terminate
63
+ end
64
+
65
+ behaves_like "package"
66
+ behaves_like "directory package"
67
+ end
68
+
69
+ describe "archive package at local location" do
70
+ before do
71
+ @location = TestUtil::TEST_PACKAGE_DIR + "HelloWorld+v0.1.0.ppg"
72
+ end
73
+
74
+ behaves_like "package"
75
+ end
76
+
77
+ describe "archive package at HTTP location" do
78
+ before do
79
+ @server = TestUtil::WebServer.start(TestUtil::TEST_PACKAGE_DIR)
80
+ @location = @server.root + "HelloWorld+v0.1.0.ppg"
81
+ end
82
+
83
+ after do
84
+ @server.terminate
85
+ end
86
+
87
+ behaves_like "package"
88
+ end
89
+
90
+ describe "git package at local location" do
91
+ before do
92
+ path = Temppath.mkdir
93
+ Util::Zip.uncompress(TestUtil::TEST_PACKAGE_DIR + "HelloWorld-gitrepos.zip", Location[path])
94
+ @location = Location[git: path]
95
+ end
96
+
97
+ behaves_like "package"
98
+ end
99
+ end
100
+
@@ -2,23 +2,25 @@ require_relative '../test-util'
2
2
 
3
3
  describe "Pione::Component::Package" do
4
4
  before do
5
- path = Location[File.expand_path("../spec_package", __FILE__)] + "TestPackage"
6
- @package = Component::PackageReader.new(path).read
7
- @scenario1 = @package.scenarios[0]
5
+ @location = TestUtil::Package.get("TestPackage1")
6
+ @package = Component::PackageReader.new(@location).read
7
+ @case1 = @package.scenarios[0]
8
+ @case2 = @package.scenarios[1]
9
+ @case3 = @package.scenarios[2]
8
10
  end
9
11
 
10
12
  it "should equal" do
11
- Component::Package.new({"PackageName" => "Test"}, [], [], []).should ==
12
- Component::Package.new({"PackageName" => "Test"}, [], [], [])
13
+ Component::Package.new(location: @location, info: {"PackageName1" => "Test"}).should ==
14
+ Component::Package.new(location: @location, info: {"PackageName1" => "Test"})
13
15
  end
14
16
 
15
17
  it "should not equal" do
16
- Component::Package.new({"PackageName" => "Test1"}, [], [], []).should !=
17
- Component::Package.new({"PackageName" => "Test2"}, [], [], [])
18
+ Component::Package.new(location: @location, info: {"PackageName1" => "Test1"}).should !=
19
+ Component::Package.new(location: @location, info: {"PackageName1" => "Test2"})
18
20
  end
19
21
 
20
22
  it "should get the package name" do
21
- @package.name.should == "TestPackage"
23
+ @package.name.should == "TestPackage1"
22
24
  end
23
25
 
24
26
  it "should get bin" do
@@ -26,7 +28,10 @@ describe "Pione::Component::Package" do
26
28
  end
27
29
 
28
30
  it "should get scenarios" do
29
- @package.scenarios.map{|scenario| scenario.name}.should.include "TestCase1"
31
+ names = @package.scenarios.map{|scenario| scenario.name}
32
+ names.should.include "Case1"
33
+ names.should.include "Case2"
34
+ names.should.include "Case3"
30
35
  end
31
36
 
32
37
  it "should get docuemtns" do
@@ -35,13 +40,13 @@ describe "Pione::Component::Package" do
35
40
 
36
41
  it "should get rules" do
37
42
  @package.rules.map{|rule| rule.path}.tap do |x|
38
- x.should.include("&TestPackage:Main")
39
- x.should.include("&TestPackage:Count")
43
+ x.should.include("&TestPackage1:Main")
44
+ x.should.include("&TestPackage1:Count")
40
45
  end
41
46
  end
42
47
 
43
48
  it "should get a main rule" do
44
- @package.find_rule("Main").path.should == "&TestPackage:Main"
49
+ @package.find_rule("Main").path.should == "&TestPackage1:Main"
45
50
  end
46
51
 
47
52
  it "should upload package files" do
@@ -52,41 +57,53 @@ describe "Pione::Component::Package" do
52
57
  end
53
58
 
54
59
  it "should find sceinarios" do
55
- @package.find_scenario(:anything).name.should == "TestCase1"
56
- @package.find_scenario("TestCase1").name.should == "TestCase1"
60
+ @package.find_scenario(:anything).name.should == "Case1"
61
+ @package.find_scenario("Case1").name.should == "Case1"
62
+ @package.find_scenario("Case2").name.should == "Case2"
63
+ @package.find_scenario("Case3").name.should == "Case3"
57
64
  end
58
65
  end
59
66
 
60
67
  describe "Pione::Component::PackageScenario" do
61
68
  before do
62
- @path = Location[File.expand_path("../spec_package", __FILE__)] + "TestPackage" + "scenario" + "case1"
63
- @scenario = Component::PackageScenarioReader.new(@path).read
69
+ @location = TestUtil::Package.get("TestPackage1")
70
+ @case1 = Component::PackageScenarioReader.new(@location, "scenario/case1").read
71
+ @case2 = Component::PackageScenarioReader.new(@location, "scenario/case2").read
72
+ @case3 = Component::PackageScenarioReader.new(@location, "scenario/case3").read
64
73
  end
65
74
 
66
75
  it 'should equal' do
67
- Component::PackageScenario.new(@path, {"ScenarioName" => "Test"}).should ==
68
- Component::PackageScenario.new(@path, {"ScenarioName" => "Test"})
76
+ Component::PackageScenario.new(@location, "scenario/case1", {"ScenarioName" => "Test"}).should ==
77
+ Component::PackageScenario.new(@location, "scenario/case1", {"ScenarioName" => "Test"})
69
78
  end
70
79
 
71
80
  it 'should not equal' do
72
- Component::PackageScenario.new(@path, {"ScenarioName" => "Test1"}).should !=
73
- Component::PackageScenario.new(@path, {"ScenarioName" => "Test2"})
81
+ Component::PackageScenario.new(@location, "scenario/case1", {"ScenarioName" => "Test1"}).should !=
82
+ Component::PackageScenario.new(@path, "scenario/case1", {"ScenarioName" => "Test2"})
74
83
  end
75
84
 
76
85
  it "should get the scenario name" do
77
- @scenario.name.should == "TestCase1"
78
- end
79
- end
80
-
81
- describe "Pione::Component::PackageReader" do
82
- it "should read package directory" do
83
- path = Location[File.expand_path("../spec_package", __FILE__)] + "TestPackage"
84
- Component::PackageReader.new(path).type.should == :directory
85
- end
86
-
87
- it "should read the package and return it" do
88
- path = Location[File.expand_path("../spec_package", __FILE__)] + "TestPackage"
89
- Component::PackageReader.read(path).should.kind_of Component::Package
86
+ @case1.name.should == "Case1"
87
+ @case2.name.should == "Case2"
88
+ @case3.name.should == "Case3"
89
+ end
90
+
91
+ it "should get input files" do
92
+ @case1.inputs[0].basename.should == "1.txt"
93
+ @case2.inputs[0].basename.should == "1.txt"
94
+ @case2.inputs[1].basename.should == "2.txt"
95
+ @case2.inputs[2].basename.should == "3.txt"
96
+ @case3.inputs[0].basename.should == "a.txt"
97
+ @case3.inputs[1].basename.should == "b.txt"
98
+ end
99
+
100
+ it "should get output files" do
101
+ @case1.outputs[0].basename.should == "1.count"
102
+ @case2.outputs[0].basename.should == "1.count"
103
+ @case2.outputs[1].basename.should == "2.count"
104
+ @case2.outputs[2].basename.should == "3.count"
105
+ @case3.outputs[0].basename.should == "a.count"
106
+ @case3.outputs[1].basename.should == "b.count"
90
107
  end
91
108
  end
92
109