tame 1.0.0 → 1.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.
- checksums.yaml +4 -4
- data/spec/tame_spec.rb +112 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 412c68e7811b25741099daa630f9a57ae84cdd1f
|
4
|
+
data.tar.gz: a4bdb9fcecebb3ccd0387a94f0eeb715d60d5333
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65ae3d8a4e5ae5dcb63f73ced86b063cb4d6f947bbad34c0e20b60f8991c8a8ebcecaadd8c1b6680694809bc1ab433bb561e8aa9a57cab11dee9fa6e466704db
|
7
|
+
data.tar.gz: c1e31b7af453ee250e4e3fd4aabb0c25319418b8046ff29b95634683a7233cc5f3cd41afab186997211c4572f57450e9653cb87c1d85ab2c053b97553ae471f5
|
data/spec/tame_spec.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
require './lib/tame'
|
2
|
+
|
3
|
+
gem 'minitest'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
|
6
|
+
RUBY = ENV['RUBY'] || 'ruby'
|
7
|
+
|
8
|
+
describe "Tame.tame" do
|
9
|
+
def _tamed(status, args, code)
|
10
|
+
system(RUBY, '-I', 'lib', '-r', 'tame', '-e', "Tame.tame(#{Array(args).map(&:inspect).join(',')}); #{code}").must_equal status
|
11
|
+
end
|
12
|
+
|
13
|
+
def tamed(code, *args)
|
14
|
+
_tamed(true, args, code)
|
15
|
+
end
|
16
|
+
|
17
|
+
def untamed(code, *args)
|
18
|
+
_tamed(false, args, code)
|
19
|
+
end
|
20
|
+
|
21
|
+
def with_lib(lib)
|
22
|
+
rubyopt = ENV['RUBYOPT']
|
23
|
+
ENV['RUBYOPT'] = "#{rubyopt} -r#{lib}"
|
24
|
+
yield
|
25
|
+
ensure
|
26
|
+
ENV['RUBYOPT'] = rubyopt
|
27
|
+
end
|
28
|
+
|
29
|
+
after do
|
30
|
+
Dir['spec/_*'].each{|f| File.delete(f)}
|
31
|
+
Dir['*.core'].each{|f| File.delete(f)}
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should raise a KeyError for unsupported exceptions" do
|
35
|
+
proc{Tame.tame(:foo)}.must_raise ArgumentError
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should produce a core file on failure if abort is use" do
|
39
|
+
Dir['*.core'].must_equal []
|
40
|
+
untamed("File.read('#{__FILE__}')")
|
41
|
+
Dir['*.core'].must_equal []
|
42
|
+
untamed("File.read('#{__FILE__}')", :abort)
|
43
|
+
Dir['*.core'].wont_equal []
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should allow reading files if :rpath is used" do
|
47
|
+
untamed("File.read('#{__FILE__}')")
|
48
|
+
tamed("File.read('#{__FILE__}')", :rpath)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should allow creating files if :cpath and :wpath are used" do
|
52
|
+
untamed("File.open('spec/_test', 'w'){}")
|
53
|
+
untamed("File.open('spec/_test', 'w'){}", :cpath)
|
54
|
+
untamed("File.open('spec/_test', 'w'){}", :wpath)
|
55
|
+
File.file?('spec/_test').must_equal false
|
56
|
+
tamed("File.open('#{'spec/_test'}', 'w'){}", :cpath, :wpath)
|
57
|
+
File.file?('spec/_test').must_equal true
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should allow writing to files if :wpath and rpath are used" do
|
61
|
+
File.open('spec/_test', 'w'){}
|
62
|
+
untamed("File.open('spec/_test', 'r+'){}")
|
63
|
+
tamed("File.open('#{'spec/_test'}', 'r+'){|f| f.write '1'}", :wpath, :rpath)
|
64
|
+
File.read('spec/_test').must_equal '1'
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should allow dns lookups if :dns is used" do
|
68
|
+
with_lib('socket') do
|
69
|
+
untamed("Socket.gethostbyname('google.com')")
|
70
|
+
tamed("Socket.gethostbyname('google.com')", :dns)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should allow internet access if :inet is used" do
|
75
|
+
with_lib('net/http') do
|
76
|
+
untamed("Net::HTTP.get('127.0.0.1', '/index.html') rescue nil")
|
77
|
+
args = [:inet]
|
78
|
+
# rpath necessary on ruby < 2.1, as it calls stat
|
79
|
+
args << :rpath if RUBY_VERSION < '2.1'
|
80
|
+
tamed("Net::HTTP.get('127.0.0.1', '/index.html') rescue nil", *args)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should allow killing programs if :proc is used" do
|
85
|
+
untamed("Process.kill(:INFO, $$)")
|
86
|
+
tamed("Process.kill(:INFO, $$)", :proc)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should allow creating temp files if :tmppath and :rpath are used" do
|
90
|
+
with_lib('tempfile') do
|
91
|
+
untamed("Tempfile.new('foo')")
|
92
|
+
untamed("Tempfile.new('foo')", :tmppath)
|
93
|
+
untamed("Tempfile.new('foo')", :rpath)
|
94
|
+
args = [:tmppath, :rpath]
|
95
|
+
# cpath necessary on ruby < 2.0, as it calls mkdir
|
96
|
+
args << :cpath if RUBY_VERSION < '2.0'
|
97
|
+
tamed("Tempfile.new('foo')", *args)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should allow unix sockets if :unix and :rpath is used" do
|
102
|
+
require 'socket'
|
103
|
+
us = UNIXServer.new('spec/_sock')
|
104
|
+
with_lib('socket') do
|
105
|
+
untamed("UNIXSocket.new('spec/_sock').send('u', 0)")
|
106
|
+
untamed("UNIXSocket.new('spec/_sock').send('u', 0)", :unix)
|
107
|
+
untamed("UNIXSocket.new('spec/_sock').send('u', 0)" ,:rpath)
|
108
|
+
tamed("UNIXSocket.new('spec/_sock').send('t', 0)", :unix, :rpath)
|
109
|
+
end
|
110
|
+
us.accept.read.must_equal 't'
|
111
|
+
end
|
112
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Evans
|
@@ -33,7 +33,8 @@ files:
|
|
33
33
|
- Rakefile
|
34
34
|
- ext/tame/extconf.rb
|
35
35
|
- ext/tame/tame.c
|
36
|
-
|
36
|
+
- spec/tame_spec.rb
|
37
|
+
homepage: https://github.com/jeremyevans/tame_libs/tree/master/ruby
|
37
38
|
licenses:
|
38
39
|
- MIT
|
39
40
|
metadata: {}
|