ramdo 0.2.1 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 439c86b3e38f8b1f40e9669235ce8cfdac5cbf75
4
- data.tar.gz: 4276f58ea837d01171f2444d65f4974d7c9f2c64
3
+ metadata.gz: b2129b580a4383759f7120ff3cd47fb3711dd4df
4
+ data.tar.gz: 7036c489c8caf72890532d9268d2f7d4d42a37d3
5
5
  SHA512:
6
- metadata.gz: c1e42d45451100eb6f3f85ea1f8d3f97cb79b49f7f24fdf3516314ef32f6a00aaaae2b5bc91f501bbba118ccd5a7d2ab2d06fff3eddd1c6fc1daaa30103adb7f
7
- data.tar.gz: 0aa2463d9946781fdcb147acb5e4e45f8a40983b2309216765ad94dfae5347a395bb81c66c57751305d4107743f8b176ac225b12d0189948fb3e5722582679b3
6
+ metadata.gz: ec2675e7b359e41493f6118b8cdb87cee66edf8a6001c79a1d29d58616b2c4b3e759c0d4adc443618c0ab09d658a92d86c5e00eff29060f47e570b0954932bd8
7
+ data.tar.gz: 3c64dd96d19a4c6848ed19b1bdb2f994a4ceea2a1616c5f8eca86ec80da97abb4183d4f450caa8c07d619679b0c7dde87ce38b30c37904e1262c58185670fa67
data/lib/ramdo.rb CHANGED
@@ -6,17 +6,12 @@ require 'fileutils'
6
6
 
7
7
  require 'ramdo/version'
8
8
  require 'ramdo/exceptions'
9
- require 'ramdo/ramdisk/factory'
10
- require 'ramdo/ramdisk/instance'
11
- require 'ramdo/ramdisk/darwin_wrapper'
12
- require 'ramdo/ramdisk/linux_wrapper'
13
- require 'ramdo/ramdisk/generic_wrapper'
9
+ require 'ramdo/disk_instance'
14
10
  require 'ramdo/store'
15
11
  require 'ramdo/cleaner'
16
12
 
17
13
  module Ramdo
18
14
  DEFAULTS = {
19
- disk_size: '100mb',
20
- ttl: 120 # In seconds
15
+ ttl: 3600 # In seconds
21
16
  }
22
17
  end
@@ -0,0 +1,38 @@
1
+ module Ramdo
2
+ class DiskInstance
3
+ NAME_PATTERN = /^ramdo_disk_([a-z0-9]+)$/
4
+
5
+ def self.list
6
+ disks = []
7
+ Dir.glob('/tmp/*').each do |dir|
8
+ if dir.split(File::SEPARATOR).last =~ NAME_PATTERN
9
+ disks << self.new(dir)
10
+ end
11
+ end
12
+
13
+ disks
14
+ end
15
+
16
+ def self.create
17
+ path = File.join('/tmp', self.generate_name)
18
+ Dir.mkdir(path)
19
+
20
+ self.new(path)
21
+ end
22
+
23
+ def self.generate_name
24
+ "ramdo_disk_#{SecureRandom.hex(4)}"
25
+ end
26
+
27
+ attr_accessor :path
28
+
29
+ def initialize(path)
30
+ @path = path
31
+ end
32
+
33
+ def destroy!
34
+ return false unless Dir.exist? @path
35
+ FileUtils.rm_r @path, :force => true
36
+ end
37
+ end
38
+ end
@@ -1,5 +1,3 @@
1
1
  module Ramdo
2
- class OSNotSupportedException < StandardError; end
3
- class NotEnoughFreeRamException < StandardError; end
4
2
  class GeneralRamdiskException < StandardError; end
5
3
  end
data/lib/ramdo/store.rb CHANGED
@@ -5,16 +5,12 @@ module Ramdo
5
5
  attr_reader :file, :dir
6
6
 
7
7
  def initialize(opts = {})
8
- wrapper = Ramdisk::Factory.get
9
- list = wrapper.list
8
+ list = DiskInstance.list
10
9
  disk = nil
11
10
  if list.length <= 0
12
- # Create a new Ramdisk
13
- disk = wrapper.create(DEFAULTS[:disk_size])
11
+ disk = DiskInstance.create
14
12
  else
15
- # Use one which is large enough
16
- list.each { |d| disk = d if d.size >= Filesize.from(DEFAULTS[:disk_size]) }
17
- disk = wrapper.create(DEFAULTS[:disk_size]) if disk.nil?
13
+ disk = list.first
18
14
  end
19
15
 
20
16
  # Every time a new store is created we check if any other store is out of date
@@ -27,14 +23,20 @@ module Ramdo
27
23
  @file = File.join(@dir, "store.#{ext}")
28
24
 
29
25
  Dir.mkdir(@dir)
26
+
27
+ if opts.has_key?(:data)
28
+ self.data = opts[:data]
29
+ elsif opts.has_key?(:file)
30
+ FileUtils.cp opts[:file], @file
31
+ end
30
32
  end
31
33
 
32
34
  def data=(data)
33
- IO.write(@file, data)
35
+ IO.binwrite(@file, data)
34
36
  end
35
37
 
36
38
  def data
37
- IO.read(@file)
39
+ IO.binread(@file)
38
40
  end
39
41
 
40
42
  def truncate
data/lib/ramdo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ramdo
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ include Ramdo
4
+ describe DiskInstance do
5
+ before(:each) do
6
+ DiskInstance.list.each do |disk|
7
+ disk.destroy!
8
+ end
9
+ end
10
+
11
+
12
+ it 'should check if a ramdisk already exists' do
13
+ disks = DiskInstance.list
14
+ expect(disks).to be_an(Array)
15
+ expect(disks.length).to be_a(Integer)
16
+ expect(disks.length).to be(0)
17
+ end
18
+
19
+ it 'should create a new disk and save a file to it' do
20
+ disk = DiskInstance.create
21
+
22
+ expect(disk).to be_an(DiskInstance)
23
+ expect { IO.write("#{disk.path}/test.bin", IO.read('/dev/urandom', 100000)) }.not_to raise_error
24
+ end
25
+
26
+ it 'should remove a RAM disk' do
27
+ disk = DiskInstance.create
28
+
29
+ count = DiskInstance.list.length
30
+ expect(disk.destroy!).to be_truthy
31
+ expect(disk.destroy!).to be_falsey # Should not work another time
32
+
33
+ expect(DiskInstance.list.length).to be(count - 1)
34
+ end
35
+
36
+ it 'should list all available disks' do
37
+ disk = DiskInstance.create
38
+
39
+ list = DiskInstance.list
40
+ expect(list.length).to eq(1)
41
+ expect(Dir.exist?(list.first.path)).to be_truthy
42
+
43
+ disk = DiskInstance.create
44
+
45
+ list = DiskInstance.list
46
+ expect(list.length).to eq(2)
47
+ expect(Dir.exist?(list.last.path)).to be_truthy
48
+
49
+ end
50
+
51
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,2 @@
1
1
  require 'ramdo'
2
- require 'timecop'
3
-
4
- def os?(os)
5
- RUBY_PLATFORM =~ os
6
- end
2
+ require 'timecop'
data/spec/store_spec.rb CHANGED
@@ -3,22 +3,37 @@ require 'spec_helper'
3
3
  include Ramdo
4
4
  describe Store do
5
5
  after(:all) do
6
- wrapper = Ramdisk::Factory.get
7
- wrapper.list.each do |disk|
6
+ DiskInstance.list.each do |disk|
8
7
  disk.destroy!
9
8
  end
10
9
  end
11
10
 
12
11
  it 'should create a new store and append data to it' do
13
- test_data = 'make me sexy'
12
+ test_data = "make me sexy"
14
13
 
15
14
  store = Store.new
15
+ expect(File.exist?(store.file)).to be_falsey
16
+
16
17
  store.data = test_data
17
18
 
19
+ expect(File.exist?(store.file)).to be_truthy
18
20
  expect(IO.read(store.file)).to eq(test_data)
19
21
  expect(store.data).to eq(test_data)
20
22
  end
21
23
 
24
+ it 'should create a new store and append empty data to it' do
25
+ test_data = nil
26
+
27
+ store = Store.new
28
+ expect(File.exist?(store.file)).to be_falsey
29
+
30
+ store.data = test_data
31
+
32
+ expect(File.exist?(store.file)).to be_truthy
33
+ expect(IO.read(store.file)).to eq("")
34
+ expect(store.data).to eq("")
35
+ end
36
+
22
37
  it 'should create a new store with a specific file extension' do
23
38
  extension = '.bin'
24
39
 
@@ -26,6 +41,13 @@ describe Store do
26
41
  expect(File.extname(store.file)).to eq(extension)
27
42
  end
28
43
 
44
+ it 'should create a new store with data' do
45
+ test_data = 'make me sexy'
46
+
47
+ store = Store.new(data: test_data)
48
+ expect(IO.read(store.file)).to eq(test_data)
49
+ end
50
+
29
51
  it 'should create a new store and write data to it' do
30
52
  test_data = 'make me sexy'
31
53
 
@@ -45,14 +67,12 @@ describe Store do
45
67
  end
46
68
 
47
69
  it 'should use existing RAM disk if available' do
48
- wrapper = Ramdisk::Factory.get
49
-
50
- wrapper.list.each { |disk| disk.destroy! }
51
- expect(wrapper.list.length).to eq(0)
70
+ DiskInstance.list.each { |disk| disk.destroy! }
71
+ expect(DiskInstance.list.length).to eq(0)
52
72
  store_1 = Store.new
53
- expect(wrapper.list.length).to eq(1)
73
+ expect(DiskInstance.list.length).to eq(1)
54
74
  store_2 = Store.new
55
- expect(wrapper.list.length).to eq(1)
75
+ expect(DiskInstance.list.length).to eq(1)
56
76
  end
57
77
 
58
78
  it 'should allow to define a specific file extension' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ramdo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Franken
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-04 00:00:00.000000000 Z
11
+ date: 2017-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocaine
@@ -137,20 +137,13 @@ files:
137
137
  - Rakefile
138
138
  - lib/ramdo.rb
139
139
  - lib/ramdo/cleaner.rb
140
+ - lib/ramdo/disk_instance.rb
140
141
  - lib/ramdo/exceptions.rb
141
- - lib/ramdo/ramdisk/darwin_wrapper.rb
142
- - lib/ramdo/ramdisk/factory.rb
143
- - lib/ramdo/ramdisk/generic_wrapper.rb
144
- - lib/ramdo/ramdisk/instance.rb
145
- - lib/ramdo/ramdisk/linux_wrapper.rb
146
142
  - lib/ramdo/store.rb
147
143
  - lib/ramdo/version.rb
148
144
  - ramdo.gemspec
149
145
  - spec/cleaner_spec.rb
150
- - spec/darwin_wrapper_spec.rb
151
- - spec/generic_wrapper_spec.rb
152
- - spec/linux_wrapper_spec.rb
153
- - spec/ramdisk_factory_spec.rb
146
+ - spec/disk_instance_spec.rb
154
147
  - spec/spec_helper.rb
155
148
  - spec/store_spec.rb
156
149
  - tmp/.gitkeep
@@ -180,10 +173,7 @@ specification_version: 4
180
173
  summary: Fast temporary store powered by RAM disks
181
174
  test_files:
182
175
  - spec/cleaner_spec.rb
183
- - spec/darwin_wrapper_spec.rb
184
- - spec/generic_wrapper_spec.rb
185
- - spec/linux_wrapper_spec.rb
186
- - spec/ramdisk_factory_spec.rb
176
+ - spec/disk_instance_spec.rb
187
177
  - spec/spec_helper.rb
188
178
  - spec/store_spec.rb
189
179
  has_rdoc:
@@ -1,71 +0,0 @@
1
- module Ramdo
2
- module Ramdisk
3
- class DarwinWrapper
4
- def initialize
5
- end
6
-
7
- def list
8
- disks = []
9
-
10
- line = Cocaine::CommandLine.new("hdiutil", "info")
11
- line.run.each_line do |line|
12
- if line =~ /^[=]+$/
13
- disks << {}
14
- elsif line =~ /^image-path[\s]+:[\s]+(ram:\/\/[0-9]+)/
15
- disks.last[:is_ram_disk] = true
16
- elsif line =~ /^(\/dev\/disk[0-9]+)[\s]+(\/Volumes\/[A-Za-z0-9_-]+)/
17
- disks.last[:path] = Regexp.last_match[2].strip
18
- disks.last[:device] = Regexp.last_match[1].strip
19
- elsif line =~ /^blockcount[\s]+:[\s]+([0-9]+)/
20
- size_in_mb = Regexp.last_match[1].to_i / 2048
21
- disks.last[:size] = Filesize.from("#{size_in_mb} MB")
22
- end
23
- end
24
-
25
- disks.map { |d| Instance.new(self, d) if d.has_key? :is_ram_disk }.compact
26
- end
27
-
28
- def create(size)
29
- size = Filesize.from(size) if size.is_a? String
30
- raise NotEnoughFreeRamException.new unless enough_ram? size
31
-
32
- # Allocate new RAM space
33
- line = Cocaine::CommandLine.new("hdiutil", "attach -nomount ram://#{(size.to('MB') * 2048).to_i}")
34
- device = line.run
35
- device.strip!
36
-
37
- # Format RAM disk
38
- line = Cocaine::CommandLine.new("diskutil", "erasevolume HFS+ '#{Instance.generate_name}' #{device}")
39
- line.run
40
-
41
- # Receive all disk and select just created one
42
- list().select { |disk| disk.device == device }.first
43
- end
44
-
45
- def destroy(instance)
46
- return false unless File.exist? instance.device
47
-
48
- line = Cocaine::CommandLine.new("hdiutil", "detach :device")
49
- line.run(device: instance.device)
50
- end
51
-
52
- private
53
- def enough_ram?(size)
54
- size = Filesize.from(size) if size.is_a? String
55
- pages_free = 0
56
- page_size = 0
57
-
58
- line = Cocaine::CommandLine.new("vm_stat")
59
- line.run.each_line do |line|
60
- if line =~ /^Pages free:[\s]+([0-9]+)./
61
- pages_free = Regexp.last_match[1].to_i
62
- elsif line =~ /^Mach Virtual Memory Statistics: +\(page size of ([0-9]+) bytes\)/
63
- page_size = Regexp.last_match[1].to_i
64
- end
65
- end
66
-
67
- Filesize.new(pages_free * page_size) > size
68
- end
69
- end
70
- end
71
- end
@@ -1,16 +0,0 @@
1
- module Ramdo
2
- module Ramdisk
3
- class Factory
4
- def self.get
5
- if RUBY_PLATFORM =~ /linux/
6
- LinuxWrapper.new
7
- elsif RUBY_PLATFORM =~ /darwin/
8
- DarwinWrapper.new
9
- else
10
- GenericWrapper.new
11
- end
12
- end
13
- end
14
-
15
- end
16
- end
@@ -1,41 +0,0 @@
1
- module Ramdo
2
- module Ramdisk
3
- class GenericWrapper
4
- def initialize
5
- @tmp_path = '/tmp'
6
- raise GeneralRamdiskException.new("tmp path not found") unless @tmp_path && Dir.exist?(@tmp_path)
7
- end
8
-
9
- def list
10
- disks = []
11
- Dir.glob(@tmp_path + '/*').each do |dir|
12
- if dir.split(File::SEPARATOR).last =~ Instance::NAME_PATTERN
13
- disks << Instance.new(self, path: dir, device: @tmp_path, size: Filesize.from("1 GB"))
14
- end
15
- end
16
-
17
- disks
18
- end
19
-
20
- def create(size)
21
- # Create new directory as dedicated space
22
- path = [@tmp_path, Instance.generate_name].join('/')
23
- Dir.mkdir(path)
24
-
25
- # Receive all disk and select just created one
26
- list().select { |disk| disk.path == path }.first
27
- end
28
-
29
- def destroy(instance)
30
- return false unless Dir.exist? instance.path
31
- FileUtils.rm_r instance.path, :force => true
32
- end
33
-
34
- private
35
- def enough_ram?(size)
36
- # As the generic wrapper does not use RAM always return true
37
- true
38
- end
39
- end
40
- end
41
- end
@@ -1,24 +0,0 @@
1
- module Ramdo
2
- module Ramdisk
3
- class Instance
4
- NAME_PATTERN = /^ramdo_disk_([a-z0-9]+)$/
5
-
6
- def self.generate_name
7
- "ramdo_disk_#{SecureRandom.hex(4)}"
8
- end
9
-
10
- attr_accessor :device, :path, :size
11
-
12
- def initialize(wrapper, info = {})
13
- @wrapper = wrapper
14
- @device = info[:device]
15
- @path = info[:path]
16
- @size = info[:size]
17
- end
18
-
19
- def destroy!
20
- @wrapper.destroy self
21
- end
22
- end
23
- end
24
- end
@@ -1,56 +0,0 @@
1
- module Ramdo
2
- module Ramdisk
3
- class LinuxWrapper
4
- def initialize
5
- line = Cocaine::CommandLine.new("cat", "/proc/mounts")
6
- line.run.each_line do |line|
7
- @shm_path = Regexp.last_match[1] if line =~ /(\/[a-z]+\/shm)[\s]tmpfs[\s]rw/
8
- end
9
- raise GeneralRamdiskException.new("shm path not found") unless @shm_path
10
- end
11
-
12
- def list
13
- disks = []
14
- Dir.glob(@shm_path + '/*').each do |dir|
15
- if dir.split(File::SEPARATOR).last =~ Instance::NAME_PATTERN
16
- disks << Instance.new(self, path: dir, device: @shm_path, size: Filesize.from("1 GB"))
17
- end
18
- end
19
-
20
- disks
21
- end
22
-
23
- def create(size)
24
- size = Filesize.from(size) if size.is_a? String
25
- raise NotEnoughFreeRamException.new unless enough_ram? size
26
-
27
- # Create new directory as dedicated space
28
- path = [@shm_path, Instance.generate_name].join('/')
29
- Dir.mkdir(path)
30
-
31
- # Receive all disk and select just created one
32
- list().select { |disk| disk.path == path }.first
33
- end
34
-
35
- def destroy(instance)
36
- return false unless File.exist? instance.path
37
- FileUtils.rm_r instance.path, :force => true
38
- end
39
-
40
- private
41
- def enough_ram?(size)
42
- size = Filesize.from(size) if size.is_a? String
43
- free_mem = ""
44
-
45
- line = Cocaine::CommandLine.new("cat", "/proc/meminfo")
46
- line.run.each_line do |line|
47
- if line =~ /^MemFree:[\s]+([0-9]+ kB)/
48
- free_mem = Regexp.last_match[1]
49
- end
50
- end
51
-
52
- Filesize.from(free_mem) > size
53
- end
54
- end
55
- end
56
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include Ramdo
4
- describe Ramdisk::DarwinWrapper, if: os?(/darwin/) do
5
- before(:each) do
6
- wrapper = Ramdisk::DarwinWrapper.new
7
- wrapper.list.each do |disk|
8
- disk.destroy!
9
- end
10
- end
11
-
12
-
13
- it 'should check if a ramdisk already exists' do
14
- wrapper = Ramdisk::DarwinWrapper.new
15
- disks = wrapper.list
16
- expect(disks).to be_an(Array)
17
- expect(disks.length).to be_a(Integer)
18
- expect(disks.length).to be(0)
19
- end
20
-
21
- it 'should check if enough RAM space is free' do
22
- wrapper = Ramdisk::DarwinWrapper.new
23
- expect(wrapper.send(:enough_ram?, '100 MB')).to be_truthy
24
- expect(wrapper.send(:enough_ram?, '100 GB')).to be_falsey
25
- end
26
-
27
- it 'should create a new RAM disk and save a file to it' do
28
- size = '100 MB'
29
-
30
- wrapper = Ramdisk::DarwinWrapper.new
31
- disk = wrapper.create(size)
32
-
33
- expect(disk).to be_an(Ramdisk::Instance)
34
- expect { IO.write("#{disk.path}/test.bin", IO.read('/dev/urandom', 100000)) }.not_to raise_error
35
- end
36
-
37
- it 'should remove a RAM disk' do
38
- wrapper = Ramdisk::DarwinWrapper.new
39
- disk = wrapper.create('100 MB')
40
-
41
- count = wrapper.list.length
42
- expect(disk.destroy!).to be_truthy
43
- expect(disk.destroy!).to be_falsey # Should not work another time
44
-
45
- expect(wrapper.list.length).to be(count - 1)
46
- end
47
-
48
- it 'should list all available RAM disks' do
49
- wrapper = Ramdisk::DarwinWrapper.new
50
- disk = wrapper.create('100 MB')
51
-
52
- list = wrapper.list
53
- expect(list.length).to eq(1)
54
- expect(list.first.device).not_to be_empty
55
- expect(File.exist?(list.first.device)).to be_truthy
56
- expect(Dir.exist?(list.first.path)).to be_truthy
57
-
58
- disk = wrapper.create('200 MB')
59
-
60
- list = wrapper.list
61
- expect(list.length).to eq(2)
62
- expect(list.last.device).not_to be_empty
63
- expect(File.exist?(list.last.device)).to be_truthy
64
- expect(Dir.exist?(list.last.path)).to be_truthy
65
- end
66
-
67
- end
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include Ramdo
4
- describe Ramdisk::GenericWrapper, focus: true do
5
- before(:each) do
6
- wrapper = Ramdisk::GenericWrapper.new
7
- wrapper.list.each do |disk|
8
- disk.destroy!
9
- end
10
- end
11
-
12
-
13
- it 'should check if a ramdisk already exists' do
14
- wrapper = Ramdisk::GenericWrapper.new
15
- disks = wrapper.list
16
- expect(disks).to be_an(Array)
17
- expect(disks.length).to be_a(Integer)
18
- expect(disks.length).to be(0)
19
- end
20
-
21
- it 'should create a new disk and save a file to it' do
22
- size = '100 MB'
23
-
24
- wrapper = Ramdisk::GenericWrapper.new
25
- disk = wrapper.create(size)
26
-
27
- expect(disk).to be_an(Ramdisk::Instance)
28
- expect { IO.write("#{disk.path}/test.bin", IO.read('/dev/urandom', 100000)) }.not_to raise_error
29
- end
30
-
31
- it 'should remove a RAM disk' do
32
- wrapper = Ramdisk::GenericWrapper.new
33
- disk = wrapper.create('100 MB')
34
-
35
- count = wrapper.list.length
36
- expect(disk.destroy!).to be_truthy
37
- expect(disk.destroy!).to be_falsey # Should not work another time
38
-
39
- expect(wrapper.list.length).to be(count - 1)
40
- end
41
-
42
- it 'should list all available RAM disks' do
43
- wrapper = Ramdisk::GenericWrapper.new
44
- disk = wrapper.create('100 MB')
45
-
46
- list = wrapper.list
47
- expect(list.length).to eq(1)
48
- expect(list.first.device).not_to be_empty
49
- expect(File.exist?(list.first.device)).to be_truthy
50
- expect(Dir.exist?(list.first.path)).to be_truthy
51
-
52
- disk = wrapper.create('200 MB')
53
-
54
- list = wrapper.list
55
- expect(list.length).to eq(2)
56
- expect(list.last.device).not_to be_empty
57
- expect(File.exist?(list.last.device)).to be_truthy
58
- expect(Dir.exist?(list.last.path)).to be_truthy
59
-
60
- end
61
-
62
- end
@@ -1,67 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include Ramdo
4
- describe Ramdisk::LinuxWrapper, if: os?(/linux/) do
5
- before(:each) do
6
- wrapper = Ramdisk::LinuxWrapper.new
7
- wrapper.list.each do |disk|
8
- disk.destroy!
9
- end
10
- end
11
-
12
-
13
- it 'should check if a ramdisk already exists' do
14
- wrapper = Ramdisk::LinuxWrapper.new
15
- disks = wrapper.list
16
- expect(disks).to be_an(Array)
17
- expect(disks.length).to be_a(Integer)
18
- expect(disks.length).to be(0)
19
- end
20
-
21
- it 'should check if enough RAM space is free' do
22
- wrapper = Ramdisk::LinuxWrapper.new
23
- expect(wrapper.send(:enough_ram?, '100 MB')).to be_truthy
24
- expect(wrapper.send(:enough_ram?, '100 GB')).to be_falsey
25
- end
26
-
27
- it 'should create a new RAM disk and save a file to it' do
28
- size = '100 MB'
29
-
30
- wrapper = Ramdisk::LinuxWrapper.new
31
- disk = wrapper.create(size)
32
-
33
- expect(disk).to be_an(Ramdisk::Instance)
34
- expect { IO.write("#{disk.path}/test.bin", IO.read('/dev/urandom', 100000)) }.not_to raise_error
35
- end
36
-
37
- it 'should remove a RAM disk' do
38
- wrapper = Ramdisk::LinuxWrapper.new
39
- disk = wrapper.create('100 MB')
40
-
41
- count = wrapper.list.length
42
- expect(disk.destroy!).to be_truthy
43
- expect(disk.destroy!).to be_falsey # Should not work another time
44
-
45
- expect(wrapper.list.length).to be(count - 1)
46
- end
47
-
48
- it 'should list all available RAM disks' do
49
- wrapper = Ramdisk::LinuxWrapper.new
50
- disk = wrapper.create('100 MB')
51
-
52
- list = wrapper.list
53
- expect(list.length).to eq(1)
54
- expect(list.first.device).not_to be_empty
55
- expect(File.exist?(list.first.device)).to be_truthy
56
- expect(Dir.exist?(list.first.path)).to be_truthy
57
-
58
- disk = wrapper.create('200 MB')
59
-
60
- list = wrapper.list
61
- expect(list.length).to eq(2)
62
- expect(list.last.device).not_to be_empty
63
- expect(File.exist?(list.last.device)).to be_truthy
64
- expect(Dir.exist?(list.last.path)).to be_truthy
65
- end
66
-
67
- end
@@ -1,16 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include Ramdo
4
- describe Ramdisk::Factory do
5
-
6
- it 'should receive wrapper for the current OS' do
7
- wrapper = Ramdisk::Factory.get
8
-
9
- if RUBY_PLATFORM =~ /linux/
10
- expect(wrapper).to be_a(Ramdisk::LinuxWrapper)
11
- elsif RUBY_PLATFORM =~ /darwin/
12
- expect(wrapper).to be_a(Ramdisk::DarwinWrapper)
13
- end
14
- end
15
-
16
- end