iron_worker_ng 0.3.3 → 0.3.4

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.3.4
@@ -5,9 +5,9 @@ require 'time'
5
5
  require 'iron_worker_ng'
6
6
 
7
7
  if $*.size == 0 || (not ['codes.create', 'tasks.create', 'schedules.create', 'tasks.log'].include?($*[0]))
8
- puts 'usage: iron_worker_ng COMMAND [OPTIONS]'
8
+ puts 'usage: iron_worker COMMAND [OPTIONS]'
9
9
  puts ' COMMAND: codes.create, tasks.create, schedules.create, tasks.log'
10
- puts ' run iron_worker_ng COMMAND --help to get more information about each command'
10
+ puts ' run iron_worker COMMAND --help to get more information about each command'
11
11
  exit 1
12
12
  end
13
13
 
@@ -27,7 +27,7 @@ if command == 'codes.create'
27
27
  execute_features = []
28
28
 
29
29
  opts = OptionParser.new do |opts|
30
- opts.banner = "usage: iron_worker_ng #{command} [OPTIONS]"
30
+ opts.banner = "usage: iron_worker #{command} [OPTIONS]"
31
31
 
32
32
  opts.on('-r', '--runtime RUNTIME', runtimes.map { |r| r[:name] }, "#{runtimes_help}") do |v|
33
33
  runtime = v
@@ -87,7 +87,7 @@ elsif command == 'tasks.create' || command == 'schedules.create'
87
87
  print_id = false
88
88
 
89
89
  opts = OptionParser.new do |opts|
90
- opts.banner = "usage: iron_worker_ng #{command} [OPTIONS]"
90
+ opts.banner = "usage: iron_worker #{command} [OPTIONS]"
91
91
 
92
92
  opts.on('-n', '--name NAME', 'code name') do |v|
93
93
  name = v
@@ -171,7 +171,7 @@ elsif command == 'tasks.log'
171
171
  live = false
172
172
 
173
173
  opts = OptionParser.new do |opts|
174
- opts.banner = "usage: iron_worker_ng #{command} [OPTIONS]"
174
+ opts.banner = "usage: iron_worker #{command} [OPTIONS]"
175
175
 
176
176
  opts.on('-t --task-id ID', 'task id') do |v|
177
177
  task_id = v
@@ -20,32 +20,33 @@ module IronWorkerNG
20
20
 
21
21
  def initialize(options = {})
22
22
  @token = options[:token] || options['token']
23
- @token ||= ENV['IRON_IO_TOKEN']
24
- @token ||= ENV['IRON_TOKEN']
25
-
26
23
  @project_id = options[:project_id] || options['project_id']
27
- @project_id ||= ENV['IRON_IO_PROJECT_ID']
24
+
25
+ if (@token.nil? || @project_id.nil?) && ((not options[:yaml_config_file].nil?) || (not options['yaml_config_file'].nil?))
26
+ load_yaml_config(options[:yaml_config_file] || options['yaml_config_file'])
27
+ end
28
+
29
+ if (@token.nil? || @project_id.nil?) && ((not options[:json_config_file].nil?) || (not options['json_config_file'].nil?))
30
+ load_json_config(options[:json_config_file] || options['json_config_file'])
31
+ end
32
+
33
+ if @token.nil? || @project_id.nil?
34
+ load_yaml_config('iron.yml')
35
+ end
36
+
37
+ if @token.nil? || @project_id.nil?
38
+ load_json_config('iron.json')
39
+ end
40
+
41
+ @token ||= ENV['IRON_TOKEN']
28
42
  @project_id ||= ENV['IRON_PROJECT_ID']
29
43
 
30
44
  if @token.nil? || @project_id.nil?
31
- [ENV['IRON_IO_CONFIG'], ENV['IRON_IO_CONFIG_FILE'], ENV['IRON_CONFIG'], ENV['IRON_CONFIG_FILE'], '~/.iron', '/etc/iron.conf'].each do |config_file|
32
- if (not config_file.nil?) && File.exists?(File.expand_path(config_file))
33
- config = YAML.load_file(File.expand_path(config_file))
34
-
35
- unless config['iron_io'].nil?
36
- @token ||= config['iron_io']['token']
37
- @project_id ||= config['iron_io']['project_id']
38
- end
39
-
40
- unless config['iron'].nil?
41
- @token ||= config['iron']['token']
42
- @project_id ||= config['iron']['project_id']
43
- end
44
-
45
- @token ||= config['token']
46
- @project_id ||= config['project_id']
47
- end
48
- end
45
+ load_yaml_config('~/.iron.yml')
46
+ end
47
+
48
+ if @token.nil? || @project_id.nil?
49
+ load_json_config('~/.iron.json')
49
50
  end
50
51
 
51
52
  if (not @token) || (not @project_id)
@@ -64,6 +65,24 @@ module IronWorkerNG
64
65
  @rest = Rest::Client.new
65
66
  end
66
67
 
68
+ def load_yaml_config(config_file)
69
+ if File.exists?(File.expand_path(config_file))
70
+ config = YAML.load_file(File.expand_path(config_file))
71
+
72
+ @token ||= config['token']
73
+ @project_id ||= config['project_id']
74
+ end
75
+ end
76
+
77
+ def load_json_config(config_file)
78
+ if File.exists?(File.expand_path(config_file))
79
+ config = JSON.load(File.read(File.expand_path(config_file)))
80
+
81
+ @token ||= config['token']
82
+ @project_id ||= config['project_id']
83
+ end
84
+ end
85
+
67
86
  def common_request_hash
68
87
  {
69
88
  'Content-Type' => 'application/json',
@@ -105,14 +105,17 @@ module IronWorkerNG
105
105
  end
106
106
 
107
107
  def tasks_wait_for(task_id, options = {})
108
- options[:sleep] ||= 5
108
+ options[:sleep] ||= options['sleep'] || 5
109
109
 
110
110
  task = tasks_get(task_id)
111
+
111
112
  while task.status == 'queued' || task.status == 'running'
112
113
  yield task if block_given?
113
114
  sleep options[:sleep]
114
115
  task = tasks_get(task_id)
115
116
  end
117
+
118
+ task
116
119
  end
117
120
 
118
121
  def schedules_list(options = {})
@@ -38,10 +38,6 @@ module IronWorkerNG
38
38
  @name = nil
39
39
  @features = []
40
40
 
41
- if File.exists?('Workerfile')
42
- eval(File.read('Workerfile'))
43
- end
44
-
45
41
  if args.length == 1 && args[0].class == String && File.exists?(args[0])
46
42
  merge_exec(args[0])
47
43
  elsif args.length == 1 && args[0].class == String
@@ -53,6 +49,14 @@ module IronWorkerNG
53
49
  merge_exec(exec) unless exec.nil?
54
50
  end
55
51
 
52
+ if args.length == 1 && args[0].class == Hash && ((not args[0][:workerfile].nil?) || (not args[0]['workerfile'].nil?))
53
+ eval(File.read(File.expand_path(args[0][:workerfile] || args[0]['workerfile'])))
54
+ else
55
+ if File.exists?('Workerfile')
56
+ eval(File.read('Workerfile'))
57
+ end
58
+ end
59
+
56
60
  unless block.nil?
57
61
  instance_eval(&block)
58
62
  end
@@ -41,7 +41,6 @@ $:.unshift("\#{root}")
41
41
 
42
42
  require 'json'
43
43
 
44
- @iron_worker_task_id = task_id
45
44
  @iron_task_id = task_id
46
45
 
47
46
  @payload = File.read(payload_file)
@@ -52,10 +51,8 @@ begin
52
51
  rescue
53
52
  end
54
53
 
55
- @iron_io_token = parsed_payload['token'] || nil
56
- @iron_token = @iron_io_token
57
- @iron_io_project_id = parsed_payload['project_id'] || nil
58
- @iron_project_id = @iron_io_project_id
54
+ @iron_token = parsed_payload['token'] || nil
55
+ @iron_project_id = parsed_payload['project_id'] || nil
59
56
  @params = parsed_payload['params'] || {}
60
57
 
61
58
  keys = @params.keys
@@ -67,26 +64,14 @@ def payload
67
64
  @payload
68
65
  end
69
66
 
70
- def iron_worker_task_id
71
- @iron_worker_task_id
72
- end
73
-
74
67
  def iron_task_id
75
68
  @iron_task_id
76
69
  end
77
70
 
78
- def iron_io_token
79
- @iron_io_token
80
- end
81
-
82
71
  def iron_token
83
72
  @iron_token
84
73
  end
85
74
 
86
- def iron_io_project_id
87
- @iron_io_project_id
88
- end
89
-
90
75
  def iron_project_id
91
76
  @iron_project_id
92
77
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iron_worker_ng
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-04-23 00:00:00.000000000 Z
13
+ date: 2012-04-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: zip
@@ -111,7 +111,7 @@ dependencies:
111
111
  description: New generation ruby client for IronWorker
112
112
  email: info@iron.io
113
113
  executables:
114
- - iron_worker_ng
114
+ - iron_worker
115
115
  extensions: []
116
116
  extra_rdoc_files:
117
117
  - LICENSE
@@ -120,15 +120,7 @@ files:
120
120
  - LICENSE
121
121
  - README.md
122
122
  - VERSION
123
- - bin/iron_worker_ng
124
- - examples/ruby/hello/hello.rb
125
- - examples/ruby/hello/hello_worker.rb
126
- - examples/ruby/master_slave/master_slave.rb
127
- - examples/ruby/master_slave/master_worker.rb
128
- - examples/ruby/master_slave/slave_worker.rb
129
- - examples/ruby/simple/Gemfile
130
- - examples/ruby/simple/sample_worker.rb
131
- - examples/ruby/simple/simple.rb
123
+ - bin/iron_worker
132
124
  - lib/iron_worker_ng.rb
133
125
  - lib/iron_worker_ng/api_client.rb
134
126
  - lib/iron_worker_ng/api_client_error.rb
@@ -150,14 +142,6 @@ files:
150
142
  - lib/iron_worker_ng/feature/ruby/merge_gemfile.rb
151
143
  - lib/iron_worker_ng/logger.rb
152
144
  - lib/iron_worker_ng/version.rb
153
- - test/Gemfile
154
- - test/Rakefile
155
- - test/data/dir1/stub
156
- - test/data/dir2/test
157
- - test/hello.rb
158
- - test/helpers.rb
159
- - test/test_basic.rb
160
- - test/test_common_features.rb
161
145
  homepage: https://github.com/iron-io/iron_worker_ruby_ng
162
146
  licenses: []
163
147
  post_install_message:
@@ -172,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
156
  version: '0'
173
157
  segments:
174
158
  - 0
175
- hash: -114107507
159
+ hash: -1067507039
176
160
  required_rubygems_version: !ruby/object:Gem::Requirement
177
161
  none: false
178
162
  requirements:
@@ -1,26 +0,0 @@
1
- require 'iron_worker_ng'
2
-
3
- # to run examples, you must specify iron.io authentication token and project id
4
- token, project_id = [ ENV['IRON_IO_TOKEN'], ENV['IRON_IO_PROJECT_ID'] ]
5
- raise("please set $IRON_IO_TOKEN and $IRON_IO_PROJECT_ID " +
6
- "environment variables") unless token and project_id
7
-
8
- # initializing api object with them
9
- client = IronWorkerNG::Client.new(:token => token,
10
- :project_id => project_id)
11
-
12
- # create ruby code bundle
13
- code = IronWorkerNG::Code::Ruby.new
14
- code.merge_exec(File.dirname(__FILE__) + '/hello_worker.rb')
15
-
16
- # upload it to iron.io
17
- client.codes.create(code)
18
-
19
- # create task to run the bundle
20
- task_id = client.tasks.create('HelloWorker').id
21
-
22
- # wait for the task to finish
23
- client.tasks.wait_for(task_id)
24
-
25
- # retriving task log
26
- log = client.tasks.log(task_id) #> log == "hello\n" -- worker stdout is in log
@@ -1 +0,0 @@
1
- puts "hello"
@@ -1,39 +0,0 @@
1
- require 'iron_worker_ng'
2
-
3
- # to run examples, you must specify iron.io authentication token and project id
4
- token, project_id = [ ENV['IRON_IO_TOKEN'], ENV['IRON_IO_PROJECT_ID'] ]
5
- raise("please set $IRON_IO_TOKEN and $IRON_IO_PROJECT_ID " +
6
- "environment variables") unless token and project_id
7
-
8
- # initializing api object with them
9
- client = IronWorkerNG::Client.new(:token => token,
10
- :project_id => project_id)
11
-
12
- # create master code bundle
13
- master = IronWorkerNG::Code::Ruby.new
14
- master.merge_exec(File.dirname(__FILE__) + '/master_worker.rb')
15
- master.merge_gem('iron_worker_ng') # we need it to queue slave workers
16
-
17
- # create slave code bundle
18
- slave = IronWorkerNG::Code::Ruby.new
19
- slave.merge_exec(File.dirname(__FILE__) + '/slave_worker.rb')
20
-
21
- # upload both
22
- client.codes.create(master)
23
- client.codes.create(slave)
24
-
25
- # run master task
26
- task_id = client.tasks.create('MasterWorker',
27
- {
28
- :args => [ [1, 2, 3],
29
- [4, 5, 6],
30
- [7, 8, 9] ]
31
- }).id
32
-
33
- # wait for the task to finish
34
- client.tasks.wait_for(task_id)
35
-
36
- # retriving task log
37
- log = client.tasks.log(task_id)
38
-
39
- #> log.lines.find{ |l| l =~ /Sum =/ } == "Sum = 45\n" -- correct result in log
@@ -1,22 +0,0 @@
1
- require 'iron_worker_ng'
2
-
3
- # token and project id are available inside worker
4
- client = IronWorkerNG::Client.new(:token => iron_io_token,
5
- :project_id => iron_io_project_id)
6
-
7
- puts 'Running slave workers...'
8
- task_ids = []
9
- params[:args].each do |arg|
10
- puts "Queueing slave with arg=#{arg.to_s}"
11
- task_ids << client.tasks.create('SlaveWorker', { :arg => arg }).id
12
- end
13
-
14
- puts 'Retriving results from slaves logs'
15
- results = task_ids.map do |id|
16
- client.tasks.wait_for(id)
17
- client.tasks.log(id).to_i
18
- end
19
-
20
- puts "Sum = #{ results.inject(:+) }"
21
-
22
- puts 'Done'
@@ -1 +0,0 @@
1
- puts params[:arg].inject(:+)
@@ -1,5 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- group :extra do
4
- gem 'pry'
5
- end
@@ -1,3 +0,0 @@
1
- require 'pry'
2
- require 'jeweler'
3
- puts "hello"
@@ -1,66 +0,0 @@
1
- require 'iron_worker_ng'
2
-
3
- # to run examples, you must specify iron.io authentication token and project id
4
- token, project_id = [ ENV['IRON_IO_TOKEN'], ENV['IRON_IO_PROJECT_ID'] ]
5
- raise("please set $IRON_IO_TOKEN and $IRON_IO_PROJECT_ID " +
6
- "environment variables") unless token and project_id
7
-
8
- IronWorkerNG::Logger.logger.level = ::Logger::DEBUG
9
-
10
- # initializing api object with them
11
- client = IronWorkerNG::Client.new(:token => token,
12
- :project_id => project_id,
13
- # rest are optinal
14
- :scheme => 'https',
15
- :port => 443,
16
- :api_version => 2,
17
- :host => 'worker-aws-us-east-1.iron.io')
18
-
19
- # creating code bundle
20
-
21
- # if not specified, name default to worker name converted from underscore to camel style
22
- code = IronWorkerNG::Code::Ruby.new
23
- code.merge_exec('/sample_worker.rb')
24
- #> code.name == 'SampleWorker'
25
-
26
- # still can pass name in constructor
27
- code = IronWorkerNG::Code::Ruby.new('transmogrify')
28
- #> code.name == 'transmogrify'
29
- code.merge_exec(File.dirname(__FILE__) + '/sample_worker.rb')
30
-
31
- # once worker merged, following attempts will be ignored
32
- code.merge_exec('anything')
33
- #> code.worker.path.end_with? '/worker.rb'
34
-
35
- # if worker requires some gems, we
36
-
37
- # we can specify worker dependency on gem
38
- code.merge_gem('jeweler')
39
- # or on Gemfile, which is recommended
40
- code.merge_gemfile(File.dirname(__FILE__) + '/Gemfile',
41
- :default, :extra)
42
- # all those dependencies will be resolved using bundler gem
43
-
44
- # upload code bundle to iron.io
45
- client.codes_create(code)
46
-
47
- # we can retrive code packages list
48
- codes = client.codes_list
49
- #> codes.map{|c| c.name}.include?('transmogrify')
50
-
51
- code_info = codes.find{|c| c.name == 'transmogrify'}
52
- # other way to get such info is codes.get:
53
- same_code_info = client.codes_get(code_info.id)
54
- #> same_code_info == code_info
55
-
56
- # create task to run the bundle
57
- task_id = client.tasks_create('transmogrify').id
58
-
59
- # wait for the task to finish
60
- client.tasks_wait_for(task_id)
61
-
62
- # retriving task log
63
- log = client.tasks_log(task_id) #> log == "hello\n" -- worker stdout is in log
64
-
65
- # cleanup
66
- client.codes_delete(code_info.id)
data/test/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'iron_worker_ng'
4
- gem 'typhoeus'
5
- gem 'pry'
data/test/Rakefile DELETED
@@ -1,45 +0,0 @@
1
- require 'rake/testtask'
2
- require 'tmpdir'
3
-
4
- Dir.chdir(File.dirname(__FILE__) + '/..')
5
-
6
- Rake::TestTask.new do |t|
7
- examples_tests_dir = Dir.mktmpdir('iw_examples')
8
-
9
- FileUtils::cp_r(Dir.glob('examples/*'), examples_tests_dir)
10
-
11
- Dir.glob('examples/**/**.rb').each do |path|
12
- next unless path =~ %r|examples/(.*)/([^/]+)/\2.rb$|
13
-
14
- dir = $1
15
- name = $2
16
-
17
- test_path = examples_tests_dir + "/#{dir}/#{name}/test_example_#{name}.rb"
18
-
19
- File.open(test_path, 'w') do |out|
20
- out << "require 'helpers'\n"
21
- out << "class #{name.capitalize}Test < Test::Unit::TestCase\n"
22
- out << "def test_example\n"
23
-
24
- File.readlines(path).each do |line|
25
- line, assert_str = line.chomp.split /#>/
26
- out << line << "\n"
27
-
28
- if assert_str
29
- cond, desc = assert_str.split /--/
30
- out << "assert(" << cond << ", '" <<
31
- (desc or "").gsub(/'/, "\\\\'") << "')\n"
32
- end
33
- end
34
-
35
- out << "end\nend\n"
36
- end
37
- end
38
-
39
- t.libs << "lib" << "test" << examples_tests_dir
40
- files = FileList['test/**/**.rb',
41
- examples_tests_dir + '/**/test_*.rb']
42
- t.test_files = files.keep_if{ |f| f =~ Regexp.new(ENV['TESTP'] || '') }
43
-
44
- t.verbose = true
45
- end
data/test/data/dir1/stub DELETED
File without changes
data/test/data/dir2/test DELETED
@@ -1 +0,0 @@
1
- test
data/test/hello.rb DELETED
@@ -1 +0,0 @@
1
- puts "hello"
data/test/helpers.rb DELETED
@@ -1,46 +0,0 @@
1
- require 'test/unit'
2
- require 'tempfile'
3
-
4
- require './lib/iron_worker_ng.rb'
5
-
6
- def code_bundle(name,&block)
7
- code = IronWorkerNG::Code::Ruby.new(name)
8
-
9
- class << code
10
- def worker_code(str)
11
- tmpdir = Dir.tmpdir + '/' + Digest::MD5.hexdigest(str)
12
- Dir.mkdir tmpdir unless Dir.exist? tmpdir
13
-
14
- tmpfname = tmpdir + '/worker.rb'
15
- File.open(tmpfname, "w") { |f| f << str }
16
-
17
- puts "created #{tmpfname}"
18
- merge_worker(tmpfname)
19
- end
20
- end
21
-
22
- code.instance_eval(&block)
23
-
24
- code
25
- end
26
-
27
- def inspect_zip(code)
28
- zip_file = code.create_zip
29
- yield Zip::ZipFile.open(zip_file)
30
- File.unlink zip_file
31
- end
32
-
33
- class IWNGTest < Test::Unit::TestCase
34
- attr_accessor :client
35
-
36
- def setup
37
- IronWorkerNG::Logger.logger.level = ::Logger::DEBUG
38
-
39
- token, project_id = [ ENV['IRON_IO_TOKEN'], ENV['IRON_IO_PROJECT_ID'] ]
40
- raise("please set $IRON_IO_TOKEN and $IRON_IO_PROJECT_ID " +
41
- "environment variables") unless token and project_id
42
-
43
- @client = IronWorkerNG::Client.new(:token => token,
44
- :project_id => project_id )
45
- end
46
- end
data/test/test_basic.rb DELETED
@@ -1,13 +0,0 @@
1
- require 'helpers'
2
-
3
- class BasicTest < IWNGTest
4
- def _test_basic
5
- code = IronWorkerNG::Code::Ruby.new('test_basic')
6
- code.merge_worker(File.dirname(__FILE__) + '/hello.rb')
7
- client.codes_create(code)
8
- task_id = client.tasks_create('test_basic').id
9
- client.tasks_wait_for(task_id)
10
- log = client.tasks_log(task_id)
11
- assert_equal( "hello\n", log, "worker stdout is in log" )
12
- end
13
- end
@@ -1,86 +0,0 @@
1
- require 'helpers'
2
- require 'zip/zip'
3
-
4
- class CommonFeaturesTest < IWNGTest
5
-
6
- def test_merge_file
7
- code = code_bundle('test') do
8
- merge_file('test', 'test/data/dir2')
9
- merge_worker('test/hello.rb')
10
- end
11
-
12
- inspect_zip(code) do |zip|
13
- assert zip.find_entry('test/data/dir2/test')
14
- end
15
- end
16
-
17
- def test_merge_file_no_dest
18
- code = code_bundle('test') do
19
- merge_file('Gemfile')
20
- merge_worker('test/hello.rb')
21
- end
22
-
23
- inspect_zip(code) do |zip|
24
- assert zip.find_entry('Gemfile')
25
- end
26
- end
27
-
28
- def test_merge_dir_check
29
- assert_raise RuntimeError, "should check if merged dir exists" do
30
- code_bundle('test') do
31
- merge_dir('dir2', 'test/data')
32
- end
33
- end
34
- end
35
-
36
- def test_merge_dir
37
- code = code_bundle('test') do
38
- merge_dir('test/data/dir2', 'test/data')
39
- merge_worker('test/hello.rb')
40
- end
41
-
42
- inspect_zip(code) do |zip|
43
- assert zip.find_entry('test/data/dir2/test')
44
- end
45
- end
46
-
47
- def test_merge_dir_no_dest
48
- code = code_bundle('test') do
49
- merge_dir('test')
50
- merge_worker('test/hello.rb')
51
- end
52
-
53
- inspect_zip(code) do |zip|
54
- assert zip.find_entry('test/hello.rb')
55
- end
56
- end
57
-
58
- def test_symlinks
59
- File.unlink 'test/data/dir1/dir2' if
60
- File.symlink? 'test/data/dir1/dir2'
61
-
62
- Dir.chdir('test/data/dir1') do
63
- File.symlink('../dir2', 'dir2')
64
- end
65
-
66
- code = code_bundle 'test_symlinks' do
67
- merge_dir('test/data/dir1', 'test/data')
68
- merge_dir('test/data/dir2', 'test/data')
69
- worker_code 'puts File.read("test/data/dir1/dir2/test")'
70
- end
71
-
72
- inspect_zip(code) do |zip|
73
- assert_equal '../dir2', zip.read('test/data/dir1/dir2')
74
- end
75
-
76
- client.codes_create(code)
77
- task_id = client.tasks_create('test_symlinks').id
78
- client.tasks_wait_for(task_id)
79
- log = client.tasks_log(task_id)
80
-
81
- assert_equal "test", log
82
-
83
- File.unlink 'test/data/dir1/dir2'
84
- end
85
-
86
- end