backzilla 0.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.
- data/.gitignore +1 -0
- data/COPYING +340 -0
- data/LICENSE +57 -0
- data/README.markdown +70 -0
- data/Rakefile +28 -0
- data/VERSION +2 -0
- data/backzilla.gemspec +85 -0
- data/bin/backzilla +40 -0
- data/examples/projects.yaml +31 -0
- data/examples/stores.yaml +12 -0
- data/lib/backzilla.rb +116 -0
- data/lib/backzilla/configuration.rb +6 -0
- data/lib/backzilla/connection.rb +5 -0
- data/lib/backzilla/entity.rb +31 -0
- data/lib/backzilla/entity/directory.rb +46 -0
- data/lib/backzilla/entity/mongo_db.rb +47 -0
- data/lib/backzilla/entity/my_sql.rb +68 -0
- data/lib/backzilla/executor.rb +17 -0
- data/lib/backzilla/logger_helper.rb +31 -0
- data/lib/backzilla/project.rb +41 -0
- data/lib/backzilla/store.rb +49 -0
- data/lib/backzilla/store/directory.rb +21 -0
- data/lib/backzilla/store/ftp.rb +37 -0
- data/lib/backzilla/store/ssh.rb +37 -0
- data/lib/backzilla/version.rb +4 -0
- data/spec/configs/directory/projects.yaml +5 -0
- data/spec/configs/directory/stores.yaml +6 -0
- data/spec/configs/mongodb/projects.yaml +5 -0
- data/spec/configs/mongodb/stores.yaml +11 -0
- data/spec/configs/mysql/projects.yaml +7 -0
- data/spec/configs/mysql/stores.yaml +11 -0
- data/spec/entities/directory_spec.rb +46 -0
- data/spec/entities/mongodb_spec.rb +104 -0
- data/spec/entities/mysql_spec.rb +126 -0
- data/spec/fixtures/directory/a.txt +2 -0
- data/spec/fixtures/directory/b.txt +1 -0
- data/spec/fixtures/directory/some/nested/stuff/c.txt +1 -0
- data/spec/fixtures/mysql/backzilla_test.sql +54 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +47 -0
- metadata +98 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
|
3
|
+
PROJECTS_CONFIG = 'spec/configs/mysql/projects.yaml'
|
4
|
+
STORES_CONFIG = 'spec/configs/mysql/stores.yaml'
|
5
|
+
|
6
|
+
def create_mysql_database
|
7
|
+
cmd =<<-CMD
|
8
|
+
echo "create database backzilla_test;
|
9
|
+
create table backzilla_test.users
|
10
|
+
(user_id INT NOT NULL AUTO_INCREMENT,
|
11
|
+
email VARCHAR(80) NOT NULL,
|
12
|
+
name VARCHAR(50) NOT NULL,
|
13
|
+
password CHAR(41) NOT NULL,
|
14
|
+
PRIMARY KEY (user_id),
|
15
|
+
UNIQUE INDEX (email));
|
16
|
+
insert into backzilla_test.users
|
17
|
+
(user_id, email, name, password)
|
18
|
+
values
|
19
|
+
('1', 'Lukas@amberbit.com', 'Lukas Kowalski', 'qweasd');
|
20
|
+
insert into backzilla_test.users
|
21
|
+
(user_id, email, name, password)
|
22
|
+
values
|
23
|
+
('2', 'Martin@amberbit.com', 'Martin Kowalski', 'qwezxc');
|
24
|
+
insert into backzilla_test.users
|
25
|
+
(user_id, email, name, password)
|
26
|
+
values
|
27
|
+
('3', 'Wojtek@amberbit.com', 'Wojtek Kowalski', 'qwerty');
|
28
|
+
insert into backzilla_test.users
|
29
|
+
(user_id, email, name, password)
|
30
|
+
values
|
31
|
+
('4', 'Paul@amberbit.com', 'Paul Kowalski', 'qweasd');
|
32
|
+
insert into backzilla_test.users
|
33
|
+
(user_id, email, name, password)
|
34
|
+
values
|
35
|
+
('5', 'Hubert@amberbit.com', 'Hubert Kowalski', 'qweqwe');
|
36
|
+
insert into backzilla_test.users
|
37
|
+
(user_id, email, name, password)
|
38
|
+
values
|
39
|
+
('6', 'Lukas2@amberbit.com', 'Lukas2 Kowalski', 'qweqwe');" | \
|
40
|
+
mysql -u #{$user} -p#{$password}
|
41
|
+
CMD
|
42
|
+
system(cmd)
|
43
|
+
end
|
44
|
+
|
45
|
+
def modify_mysql_database
|
46
|
+
cmd =<<-CMD
|
47
|
+
echo "update backzilla_test.users set
|
48
|
+
name = 'Kacper the friendly ghoust'
|
49
|
+
where user_id = 1" | \
|
50
|
+
mysql -u #{$user} -p#{$password}
|
51
|
+
CMD
|
52
|
+
system(cmd)
|
53
|
+
end
|
54
|
+
|
55
|
+
def drop_mysql_database
|
56
|
+
cmd =<<-CMD
|
57
|
+
echo "drop database backzilla_test; " |\
|
58
|
+
mysql -u #{$user} -p#{$password}
|
59
|
+
CMD
|
60
|
+
`#{cmd}`
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "Backzilla", "mysql", "backup preparation" do
|
64
|
+
before :each do
|
65
|
+
projects_file = File.expand_path PROJECTS_CONFIG
|
66
|
+
data = YAML.load_file projects_file
|
67
|
+
projects = data.inject([]) do |projects, project_data|
|
68
|
+
project_name, project_entities_data = *project_data
|
69
|
+
data[project_name].each do |entity_name, entity_data|
|
70
|
+
$password = entity_data['password']
|
71
|
+
$user = entity_data['user']
|
72
|
+
@mysql = Backzilla::Entity::MySQL.new('test', entity_data)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
create_mysql_database
|
76
|
+
@mysql.project = Backzilla::Project.new('test')
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should prepare mysql database to be backed up" do
|
80
|
+
path = Pathname.new(@mysql.prepare_backup)
|
81
|
+
path.should == Pathname.new("/tmp/backzilla/test/test/backzilla_test.sql")
|
82
|
+
flaga = false
|
83
|
+
file1 = File.new(path, "r")
|
84
|
+
file2 = File.new('spec/fixtures/mysql/backzilla_test.sql', "r")
|
85
|
+
while (line1 = file1.gets)
|
86
|
+
line2 = file2.gets
|
87
|
+
unless line1.include? "-- Dump completed"
|
88
|
+
unless line1.include? "-- Server version"
|
89
|
+
line1.should == line2
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
file1.close
|
94
|
+
file2.close
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "Backzilla", "mysql", "finalize restore" do
|
99
|
+
before :each do
|
100
|
+
projects_file = File.expand_path PROJECTS_CONFIG
|
101
|
+
data = YAML.load_file projects_file
|
102
|
+
projects = data.inject([]) do |projects, project_data|
|
103
|
+
project_name, project_entities_data = *project_data
|
104
|
+
data[project_name].each do |entity_name, entity_data|
|
105
|
+
@mysql = Backzilla::Entity::MySQL.new('test', entity_data)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
@mysql.project = Backzilla::Project.new('test')
|
109
|
+
end
|
110
|
+
|
111
|
+
after(:all) do
|
112
|
+
drop_mysql_database
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should restore mysql database from given file" do
|
116
|
+
modify_mysql_database
|
117
|
+
@mysql.finalize_restore(:path => '/tmp/backzilla/test/test/')
|
118
|
+
cmd =<<-CMD
|
119
|
+
echo "select * from backzilla_test.users; " |\
|
120
|
+
mysql -u #{$user} -p#{$password}
|
121
|
+
CMD
|
122
|
+
tmp = `#{cmd}`
|
123
|
+
tmp.should_not include "Kacper the friendly ghoust"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
bbb
|
@@ -0,0 +1 @@
|
|
1
|
+
ccc
|
@@ -0,0 +1,54 @@
|
|
1
|
+
-- MySQL dump 10.13 Distrib 5.1.41, for debian-linux-gnu (x86_64)
|
2
|
+
--
|
3
|
+
-- Host: localhost Database: backzilla_test
|
4
|
+
-- ------------------------------------------------------
|
5
|
+
-- Server version 5.1.41-3ubuntu12.3
|
6
|
+
|
7
|
+
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
8
|
+
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
9
|
+
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
10
|
+
/*!40101 SET NAMES utf8 */;
|
11
|
+
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
12
|
+
/*!40103 SET TIME_ZONE='+00:00' */;
|
13
|
+
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
14
|
+
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
15
|
+
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
16
|
+
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
17
|
+
|
18
|
+
--
|
19
|
+
-- Table structure for table `users`
|
20
|
+
--
|
21
|
+
|
22
|
+
DROP TABLE IF EXISTS `users`;
|
23
|
+
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
24
|
+
/*!40101 SET character_set_client = utf8 */;
|
25
|
+
CREATE TABLE `users` (
|
26
|
+
`user_id` int(11) NOT NULL AUTO_INCREMENT,
|
27
|
+
`email` varchar(80) NOT NULL,
|
28
|
+
`name` varchar(50) NOT NULL,
|
29
|
+
`password` char(41) NOT NULL,
|
30
|
+
PRIMARY KEY (`user_id`),
|
31
|
+
UNIQUE KEY `email` (`email`)
|
32
|
+
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
|
33
|
+
/*!40101 SET character_set_client = @saved_cs_client */;
|
34
|
+
|
35
|
+
--
|
36
|
+
-- Dumping data for table `users`
|
37
|
+
--
|
38
|
+
|
39
|
+
LOCK TABLES `users` WRITE;
|
40
|
+
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
|
41
|
+
INSERT INTO `users` VALUES (1,'Lukas@amberbit.com','Lukas Kowalski','qweasd'),(2,'Martin@amberbit.com','Martin Kowalski','qwezxc'),(3,'Wojtek@amberbit.com','Wojtek Kowalski','qwerty'),(4,'Paul@amberbit.com','Paul Kowalski','qweasd'),(5,'Hubert@amberbit.com','Hubert Kowalski','qweqwe'),(6,'Lukas2@amberbit.com','Lukas2 Kowalski','qweqwe');
|
42
|
+
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
|
43
|
+
UNLOCK TABLES;
|
44
|
+
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
45
|
+
|
46
|
+
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
47
|
+
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
48
|
+
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
49
|
+
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
50
|
+
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
51
|
+
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
52
|
+
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
53
|
+
|
54
|
+
-- Dump completed on 2010-07-19 12:11:40
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
$LOAD_PATH.unshift "lib"
|
3
|
+
require "backzilla"
|
4
|
+
|
5
|
+
Spec::Runner.configure do |config|
|
6
|
+
# == Mock Framework
|
7
|
+
#
|
8
|
+
# RSpec uses it's own mocking framework by default. If you prefer to
|
9
|
+
# use mocha, flexmock or RR, uncomment the appropriate line:
|
10
|
+
#
|
11
|
+
# config.mock_with :mocha
|
12
|
+
# config.mock_with :flexmock
|
13
|
+
# config.mock_with :rr
|
14
|
+
#
|
15
|
+
# == Notes
|
16
|
+
#
|
17
|
+
# For more information take a look at Spec::Example::Configuration and Spec::Runner
|
18
|
+
|
19
|
+
def prefix_configs(prefix)
|
20
|
+
@prefix = prefix
|
21
|
+
end
|
22
|
+
|
23
|
+
def run_backzilla(options)
|
24
|
+
option = options[:option]
|
25
|
+
cmd = "./bin/backzilla #{option} #{options[:project_name]}"
|
26
|
+
if @prefix
|
27
|
+
cmd = "BACKZILLA_STORES_CONFIG=spec/configs/#{@prefix}/stores.yaml " + cmd
|
28
|
+
cmd = "BACKZILLA_PROJECTS_CONFIG=spec/configs/#{@prefix}/projects.yaml " + cmd
|
29
|
+
end
|
30
|
+
`sh -c "#{cmd}"`
|
31
|
+
end
|
32
|
+
|
33
|
+
def directory_path
|
34
|
+
if !File.exist? "/tmp/backzilla/#{@prefix}"
|
35
|
+
if !File.exist? "/tmp/backzilla"
|
36
|
+
FileUtils.mkdir "/tmp/backzilla"
|
37
|
+
end
|
38
|
+
FileUtils.mkdir "/tmp/backzilla/#{@prefix}"
|
39
|
+
end
|
40
|
+
"/tmp/backzilla/#{@prefix}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def setup_directory
|
44
|
+
FileUtils.cp_r "spec/fixtures/directory", "/tmp/backzilla/"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: backzilla
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Wojtek Piekutowski, Pawe\xC5\x82 Sobolewski"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-07-30 00:00:00 +02:00
|
13
|
+
default_executable: backzilla
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Backzilla can backup multiple entities to multiple destinations.
|
17
|
+
email: pawel.sobolewski@amberbit.com
|
18
|
+
executables:
|
19
|
+
- backzilla
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.markdown
|
25
|
+
files:
|
26
|
+
- .gitignore
|
27
|
+
- COPYING
|
28
|
+
- LICENSE
|
29
|
+
- README.markdown
|
30
|
+
- Rakefile
|
31
|
+
- VERSION
|
32
|
+
- backzilla.gemspec
|
33
|
+
- bin/backzilla
|
34
|
+
- examples/projects.yaml
|
35
|
+
- examples/stores.yaml
|
36
|
+
- lib/backzilla.rb
|
37
|
+
- lib/backzilla/configuration.rb
|
38
|
+
- lib/backzilla/connection.rb
|
39
|
+
- lib/backzilla/entity.rb
|
40
|
+
- lib/backzilla/entity/directory.rb
|
41
|
+
- lib/backzilla/entity/mongo_db.rb
|
42
|
+
- lib/backzilla/entity/my_sql.rb
|
43
|
+
- lib/backzilla/executor.rb
|
44
|
+
- lib/backzilla/logger_helper.rb
|
45
|
+
- lib/backzilla/project.rb
|
46
|
+
- lib/backzilla/store.rb
|
47
|
+
- lib/backzilla/store/directory.rb
|
48
|
+
- lib/backzilla/store/ftp.rb
|
49
|
+
- lib/backzilla/store/ssh.rb
|
50
|
+
- lib/backzilla/version.rb
|
51
|
+
- spec/configs/directory/projects.yaml
|
52
|
+
- spec/configs/directory/stores.yaml
|
53
|
+
- spec/configs/mongodb/projects.yaml
|
54
|
+
- spec/configs/mongodb/stores.yaml
|
55
|
+
- spec/configs/mysql/projects.yaml
|
56
|
+
- spec/configs/mysql/stores.yaml
|
57
|
+
- spec/entities/directory_spec.rb
|
58
|
+
- spec/entities/mongodb_spec.rb
|
59
|
+
- spec/entities/mysql_spec.rb
|
60
|
+
- spec/fixtures/directory/a.txt
|
61
|
+
- spec/fixtures/directory/b.txt
|
62
|
+
- spec/fixtures/directory/some/nested/stuff/c.txt
|
63
|
+
- spec/fixtures/mysql/backzilla_test.sql
|
64
|
+
- spec/spec.opts
|
65
|
+
- spec/spec_helper.rb
|
66
|
+
has_rdoc: true
|
67
|
+
homepage: http://amberbit.com/
|
68
|
+
licenses: []
|
69
|
+
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options:
|
72
|
+
- --charset=UTF-8
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
version:
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: "0"
|
86
|
+
version:
|
87
|
+
requirements: []
|
88
|
+
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 1.3.5
|
91
|
+
signing_key:
|
92
|
+
specification_version: 3
|
93
|
+
summary: Multi-purpose backup tool
|
94
|
+
test_files:
|
95
|
+
- spec/spec_helper.rb
|
96
|
+
- spec/entities/directory_spec.rb
|
97
|
+
- spec/entities/mysql_spec.rb
|
98
|
+
- spec/entities/mongodb_spec.rb
|