rfusefs 1.0.2.RC1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
- require 'rfusefs'
3
- require 'tmpdir'
4
- require 'pathname'
5
- require 'hello'
6
-
7
- describe "Access Hello World sample from Ruby file operations" do
8
- let(:mountpoint) { Pathname.new(Dir.mktmpdir("rfusefs_sample")) }
9
-
10
- before(:all) do
11
- hello = HelloDir.new()
12
- FuseFS.mount(hello,mountpoint)
13
- #Give FUSE some time to get started
14
- sleep(0.5)
15
- end
16
-
17
- after(:all) do
18
- FuseFS.unmount(mountpoint)
19
- sleep(0.5)
20
- FileUtils.rmdir(mountpoint)
21
- end
22
-
23
- it "should list expected root directory contents" do
24
- Dir.entries(mountpoint.to_s).should =~ [".","..","hello.txt"]
25
- end
26
-
27
- it "should output the expected sample contents" do
28
- (mountpoint + "hello.txt").read().should == "Hello, World!\n"
29
- end
30
- end
@@ -1,42 +0,0 @@
1
- SPEC_DIR = File.dirname(__FILE__)
2
- lib_path = File.expand_path("#{SPEC_DIR}/../samples")
3
- puts lib_path
4
- $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
5
-
6
-
7
- require 'rfusefs'
8
- require 'fusefs/metadir'
9
- require 'fcntl'
10
- require 'tmpdir'
11
- require 'pathname'
12
- require 'fileutils'
13
-
14
- module RFuseFSHelper
15
-
16
- def pathnames(*args)
17
- args.collect {|x| Pathname.new(x) }
18
- end
19
-
20
- def permissions(mode)
21
- return (mode & 07777)
22
- end
23
-
24
- def filetype(mode)
25
- return (mode & RFuse::Stat::S_IFMT)
26
- end
27
-
28
- FuseContext = Struct.new(:uid,:gid)
29
- def fuse_context(uid=Process.uid,gid=Process.gid)
30
- FuseContext.new(uid,gid)
31
- end
32
-
33
-
34
- def mktmpdir(name)
35
- tmpdir = Pathname.new(Dir.tmpdir) + "rfusefs"
36
- tmpdir = tmpdir + name
37
- FileUtils.mkdir_p(tmpdir.to_s) unless tmpdir.directory?
38
- tmpdir
39
- end
40
- end
41
-
42
- include RFuseFSHelper
@@ -1,135 +0,0 @@
1
- require 'spec_helper'
2
- require 'tmpdir'
3
- require 'sqlite3'
4
- require 'pathname'
5
- require "fusefs/sqlitemapper"
6
-
7
- class SQLFixture
8
-
9
- SQL = "select * from files"
10
-
11
- attr_reader :tmpdir
12
- attr_reader :db
13
- def initialize()
14
- @tmpdir = Pathname.new(Dir.mktmpdir("rfusefs_sqlitemapper"))
15
- @db_path = @tmpdir + "test.db"
16
- @db = SQLite3::Database.new(@db_path.to_s)
17
- @db.execute <<-SQL
18
- create table files (
19
- real_path varchar(120),
20
- mapped_path varchar(120)
21
- );
22
- SQL
23
-
24
- pathmap("hello.txt","/textfiles/hello")
25
- pathmap("mysong.mp3","/artist/album/mysong.mp3")
26
- pathmap("apicture.jpeg","/pictures/201103/apicture.jpg")
27
-
28
- end
29
-
30
- def pathmap(real_file,mapped_path)
31
- real_path = (@tmpdir + real_file).to_s
32
- File.open(real_path,"w") do |f|
33
- f << mapped_path
34
- end
35
- @db.execute "insert into files values ( ?, ? )", real_path,mapped_path
36
- end
37
-
38
- def unpathmap(mapped_path)
39
- @db.execute("delete from files where mapped_path = ?", mapped_path)
40
- end
41
-
42
- def db_force_write
43
- @db.close unless @db.closed?
44
- @db = SQLite3::Database.new(@db_path.to_s)
45
- end
46
-
47
- def fs
48
- @fs ||= FuseFS::SqliteMapperFS.new(@db_path,SQL) do |row|
49
- [ row['real_path'], row['mapped_path'] ]
50
- end
51
- end
52
-
53
- def mount()
54
- return @mountpoint if @mountpoint
55
- @mountpoint = Pathname.new(Dir.mktmpdir("rfusefs_sqlitmapper_mnt"))
56
- FuseFS.mount(fs,@mountpoint)
57
- sleep 0.5
58
- @mountpoint
59
- end
60
-
61
- def cleanup
62
- @db.close
63
- if @mountpoint
64
- FuseFS.unmount(@mountpoint)
65
- FileUtils.rmdir @mountpoint
66
- end
67
- FileUtils.rm_r(@tmpdir)
68
- end
69
- end
70
- describe "SqliteMapper" do
71
-
72
- let(:fixture) { SQLFixture.new }
73
- let(:fs) { fixture.fs }
74
-
75
- after(:each) do
76
- fixture.cleanup
77
- end
78
-
79
- context "filesystem outside FUSE" do
80
- before(:each) do
81
- fs.mounted()
82
- sleep(0.5)
83
- end
84
-
85
- after(:each) do
86
- fs.unmounted()
87
- end
88
-
89
- it "should map files from a sqlite database" do
90
- fs.directory?("/").should be_true
91
- fs.directory?("/textfiles").should be_true
92
- fs.directory?("/pictures/201103").should be_true
93
- fs.file?("/textfiles/hello").should be_true
94
- fs.directory?("/textfiles/hello").should be_false
95
- fs.file?("/artist/album/mysong.mp3").should be_true
96
- fs.directory?("/artist/album/mysong.mp3").should be_false
97
- fs.file?("/some/unknown/path").should be_false
98
- end
99
-
100
- context "an updated database" do
101
-
102
- it "should add new files" do
103
- fixture.pathmap("added.txt","/textfiles/added.txt")
104
- fixture.db_force_write()
105
- fs.rescan; sleep(0.3)
106
- fs.file?("/textfiles/added.txt").should be_true
107
- end
108
-
109
- it "should remove files and directories no longer mapped" do
110
- fixture.unpathmap("/textfiles/hello")
111
- fixture.db_force_write()
112
- fs.rescan; sleep(0.3)
113
- fs.file?("/textfiles/hello").should be_false
114
- fs.directory?("/textfiles").should be_false
115
- end
116
- end
117
-
118
- context "a real Fuse filesystem" do
119
- before(:each) do
120
- fs.use_raw_file_access = true
121
- fs.allow_write = true
122
- @mountpoint = fixture.mount
123
- end
124
-
125
- it "should read files" do
126
-
127
- hello_path = (@mountpoint + "textfiles/hello")
128
- hello_path.open do |f|
129
- f.read.should == "/textfiles/hello"
130
- end
131
- end
132
-
133
- end
134
- end
135
- end