jackowayed-tyrantmanager 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'logging'
4
+
5
+ $:.unshift File.expand_path( File.join( File.dirname( __FILE__ ),"..","lib"))
6
+
7
+
8
+ Logging::Logger['TyrantManager'].level = :all
9
+
10
+ module Spec
11
+ module Log
12
+ def self.io
13
+ @io ||= StringIO.new
14
+ end
15
+ def self.appender
16
+ @appender ||= Logging::Appenders::IO.new( "speclog", io )
17
+ end
18
+
19
+ Logging::Logger['TyrantManager'].add_appenders( Log.appender )
20
+
21
+ def self.layout
22
+ @layout ||= Logging::Layouts::Pattern.new(
23
+ :pattern => "[%d] %5l %6p %c : %m\n",
24
+ :date_pattern => "%Y-%m-%d %H:%M:%S"
25
+ )
26
+ end
27
+
28
+ Log.appender.layout = layout
29
+ end
30
+
31
+ module Helpers
32
+ require 'tmpdir'
33
+ def temp_dir( unique_id = $$ )
34
+ dirname = File.join( Dir.tmpdir, "tyrant-spec-#{unique_id}" )
35
+ FileUtils.mkdir_p( dirname ) unless File.directory?( dirname )
36
+ # for osx
37
+ dirname = Dir.chdir( dirname ) { Dir.pwd }
38
+ end
39
+
40
+ def spec_log
41
+ Log.io.string
42
+ end
43
+ end
44
+ end
45
+
46
+ Spec::Runner.configure do |config|
47
+ config.include Spec::Helpers
48
+
49
+ config.before do
50
+ Spec::Log.io.rewind
51
+ Spec::Log.io.truncate( 0 )
52
+ end
53
+
54
+ config.after do
55
+ Spec::Log.io.rewind
56
+ Spec::Log.io.truncate( 0 )
57
+ end
58
+ end
@@ -0,0 +1,106 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
2
+
3
+ require 'tyrant_manager'
4
+ require 'tyrant_manager/tyrant_instance'
5
+
6
+ describe TyrantManager::TyrantInstance do
7
+ before( :each ) do
8
+ @tdir = File.join( temp_dir, 'tyrant' )
9
+ TyrantManager::Log.silent {
10
+ @mgr = TyrantManager.setup( @tdir )
11
+ @idir = @mgr.instances_path( "test" )
12
+ @tyrant = TyrantManager::TyrantInstance.setup( @idir )
13
+ @tyrant.manager = @mgr
14
+ }
15
+ end
16
+
17
+ after( :each ) do
18
+ FileUtils.rm_rf @tdir
19
+ end
20
+
21
+ it "raises an exception if given an invalid directory on initialization" do
22
+ lambda { TyrantManager::TyrantInstance.new( "/tmp" ) }.should raise_error( TyrantManager::Error, /tmp is not a valid archive/ )
23
+ end
24
+
25
+ it "#config_file" do
26
+ @tyrant.config_file.should == File.join( @tdir, "instances", "test", "config.rb" )
27
+ File.exist?( @tyrant.config_file ).should == true
28
+ end
29
+
30
+ it "#configuration" do
31
+ @tyrant.configuration.should_not == nil
32
+ end
33
+
34
+ it "#pid_file" do
35
+ @tyrant.pid_file.should == File.join( @tdir, "instances", "test", "test.pid" )
36
+ end
37
+
38
+ it "#log_file" do
39
+ @tyrant.log_file.should == File.join( @tdir, "instances", "test", "log", "test.log" )
40
+ end
41
+
42
+ it "#replication_timestamp_file" do
43
+ @tyrant.replication_timestamp_file.should == File.join( @tdir, "instances", "test", "test.rts" )
44
+ end
45
+
46
+ it "#lua_extension_file" do
47
+ @tyrant.lua_extension_file.should == File.join( @tdir, "instances", "test", "lua", "test.lua" )
48
+ end
49
+
50
+ it "#data_dir" do
51
+ @tyrant.data_dir.should == File.join( @tdir, "instances", "test", "data" )
52
+ end
53
+
54
+ describe "against running instances" do
55
+ before( :each ) do
56
+ @tyrant.start
57
+ start = Time.now
58
+ loop do
59
+ break if @tyrant.running?
60
+ sleep 0.1
61
+ break if (Time.now - start) > 2
62
+ end
63
+ end
64
+
65
+ after( :each ) do
66
+ @tyrant.stop
67
+ end
68
+
69
+ it "#is_slave?" do
70
+ @tyrant.running?.should == true
71
+ @tyrant.should_not be_is_slave
72
+ @tyrant.stop
73
+ end
74
+
75
+ end
76
+
77
+
78
+ describe "database types" do
79
+ { 'memory-hash' => "*",
80
+ 'memory-tree' => "+",
81
+ 'hash' => "tch",
82
+ 'tree' => "tcb",
83
+ 'fixed' => "tcf",
84
+ 'table' => "tct"
85
+ }.each_pair do |db_type, db_ext|
86
+ it "db_type of #{db_type} is db file with ext #{db_ext}" do
87
+ f = @tyrant.db_file( db_type )
88
+ if f.size == 1 then
89
+ f.should == db_ext
90
+ else
91
+ f.should == File.join( @tdir, "instances", "test", "data", "test.#{db_ext}" )
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ it "#ulog_dir" do
98
+ @tyrant.ulog_dir.should == File.join( @tdir, "instances", "test", "ulog" )
99
+ end
100
+
101
+
102
+ it "#start_command" do
103
+ @tyrant.start_command.should =~ /^ttserver/
104
+ end
105
+
106
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
2
+
3
+ require 'tyrant_manager'
4
+
5
+ describe TyrantManager do
6
+ before( :each ) do
7
+ @tdir = File.join( temp_dir, 'tyrant' )
8
+ TyrantManager::Log.silent {
9
+ @mgr = TyrantManager.setup( @tdir )
10
+ }
11
+ #TyrantManager::Log.level = :debug
12
+ end
13
+
14
+ after( :each ) do
15
+ #puts spec_log
16
+ FileUtils.rm_rf @tdir
17
+ end
18
+
19
+ describe "#default_directory" do
20
+ it "uses the current working directory" do
21
+ Dir.chdir( @tdir ) do |d|
22
+ TyrantManager.default_directory.should == d
23
+ end
24
+ end
25
+
26
+ it "uses the TYRANT_MANAGER_HOME environment variable" do
27
+ ENV['TYRANT_MANAGER_HOME'] = @tdir
28
+ TyrantManager.default_directory.should == @tdir
29
+ end
30
+ end
31
+
32
+ it "initializes with an existing directory" do
33
+ t = TyrantManager.new( @tdir )
34
+ t.config_file.should == File.join( @tdir, "config.rb" )
35
+ end
36
+
37
+ it "raises an error if attempting to initialize from a non-existent tyrnat home" do
38
+ lambda { TyrantManager.new( "/tmp" ) }.should raise_error( TyrantManager::Error, /\/tmp is not a valid archive/ )
39
+ end
40
+
41
+ it "#config_file" do
42
+ @mgr.config_file.should == File.join( @tdir, "config.rb" )
43
+ File.exist?( @mgr.config_file ).should == true
44
+ end
45
+
46
+ it "#configuration" do
47
+ @mgr.configuration.should_not == nil
48
+ end
49
+
50
+ it "has the location of the ttserver command" do
51
+ @mgr.configuration.ttserver.should == "ttserver"
52
+ end
53
+
54
+ it "knows all its instances" do
55
+ 3.times do |x|
56
+ idir = @mgr.instances_path( "test#{x}" )
57
+ TyrantManager::TyrantInstance.setup( idir )
58
+ end
59
+
60
+ @mgr.instances.size.should == 3
61
+ names = []
62
+ @mgr.each_instance do |i|
63
+ i.name.should =~ /test\d/
64
+ names << i.name
65
+ end
66
+
67
+ names.sort.should == %w[ test0 test1 test2 ]
68
+ end
69
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
2
+
3
+ describe "TyrantManager::Version" do
4
+
5
+ it "should have a version string" do
6
+ TyrantManager::Version.to_s.should =~ /\d+\.\d+\.\d+/
7
+ TyrantManager::VERSION.should =~ /\d+\.\d+\.\d+/
8
+ end
9
+
10
+ it "should have a version hash" do
11
+ h = TyrantManager::Version.to_hash
12
+ [ :major, :minor, :build ].each do |k|
13
+ h[k].should_not be_nil
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ require 'tasks/config'
2
+ #-------------------------------------------------------------------------------
3
+ # announcement methods
4
+ #-------------------------------------------------------------------------------
5
+
6
+ proj_config = Configuration.for('project')
7
+ namespace :announce do
8
+ desc "create email for ruby-talk"
9
+ task :email do
10
+ info = Utils.announcement
11
+
12
+ File.open("email.txt", "w") do |mail|
13
+ mail.puts "From: #{proj_config.author} <#{proj_config.email}>"
14
+ mail.puts "To: ruby-talk@ruby-lang.org"
15
+ mail.puts "Date: #{Time.now.rfc2822}"
16
+ mail.puts "Subject: [ANN] #{info[:subject]}"
17
+ mail.puts
18
+ mail.puts info[:title]
19
+ mail.puts
20
+ mail.puts "{{ Release notes for Version #{TyrantManager::VERSION} }}"
21
+ mail.puts
22
+ mail.puts info[:release_notes]
23
+ mail.puts
24
+ mail.puts " #{info[:urls]}"
25
+ mail.puts
26
+ mail.puts "=== Installation"
27
+ mail.puts
28
+ mail.puts " gem install #{TyrantManager::GEM_SPEC.name}"
29
+ mail.puts
30
+ mail.puts "=== Description"
31
+ mail.puts
32
+ mail.puts info[:description]
33
+ mail.puts
34
+ end
35
+ puts "Created the following as email.txt:"
36
+ puts "-" * 72
37
+ puts File.read("email.txt")
38
+ puts "-" * 72
39
+ end
40
+
41
+ CLOBBER << "email.txt"
42
+ end
43
+
@@ -0,0 +1,99 @@
1
+ require 'configuration'
2
+
3
+ require 'rake'
4
+ require 'tasks/utils'
5
+
6
+ #-----------------------------------------------------------------------
7
+ # General project configuration
8
+ #-----------------------------------------------------------------------
9
+ Configuration.for('project') {
10
+ name "tyrantmanager"
11
+ version TyrantManager::VERSION
12
+ author "Jeremy Hinegardner"
13
+ email "jeremy@copiousfreetime.org"
14
+ homepage "http://copiousfreetime.rubyforge.org/tyrantmanager/"
15
+ description Utils.section_of("README.rdoc", "description")
16
+ summary description.split(".").first
17
+ history "HISTORY.rdoc"
18
+ license FileList["LICENSE"]
19
+ readme "README.rdoc"
20
+ }
21
+
22
+ #-----------------------------------------------------------------------
23
+ # Packaging
24
+ #-----------------------------------------------------------------------
25
+ Configuration.for('packaging') {
26
+ # files in the project
27
+ proj_conf = Configuration.for('project')
28
+ files {
29
+ bin FileList["bin/*"]
30
+ ext FileList["ext/*.{c,h,rb}"]
31
+ lib FileList["lib/**/*.rb"]
32
+ test FileList["spec/**/*.rb", "test/**/*.rb"]
33
+ data FileList["data/**/*"]
34
+ tasks FileList["tasks/**/*.r{ake,b}"]
35
+ rdoc FileList[proj_conf.readme, proj_conf.history,
36
+ proj_conf.license] + lib
37
+ all bin + ext + lib + test + data + rdoc + tasks
38
+ }
39
+
40
+ # ways to package the results
41
+ formats {
42
+ tgz true
43
+ zip true
44
+ rubygem Configuration::Table.has_key?('rubygem')
45
+ }
46
+ }
47
+
48
+ #-----------------------------------------------------------------------
49
+ # Gem packaging
50
+ #-----------------------------------------------------------------------
51
+ Configuration.for("rubygem") {
52
+ spec "gemspec.rb"
53
+ Configuration.for('packaging').files.all << spec
54
+ }
55
+
56
+ #-----------------------------------------------------------------------
57
+ # Testing
58
+ # - change mode to 'testunit' to use unit testing
59
+ #-----------------------------------------------------------------------
60
+ Configuration.for('test') {
61
+ mode "spec"
62
+ files Configuration.for("packaging").files.test
63
+ options %w[ --format specdoc --color ]
64
+ ruby_opts %w[ ]
65
+ }
66
+
67
+ #-----------------------------------------------------------------------
68
+ # Rcov
69
+ #-----------------------------------------------------------------------
70
+ Configuration.for('rcov') {
71
+ output_dir "coverage"
72
+ libs %w[ lib ]
73
+ rcov_opts %w[ --html ]
74
+ ruby_opts %w[ ]
75
+ test_files Configuration.for('packaging').files.test
76
+ }
77
+
78
+ #-----------------------------------------------------------------------
79
+ # Rdoc
80
+ #-----------------------------------------------------------------------
81
+ Configuration.for('rdoc') {
82
+ files Configuration.for('packaging').files.rdoc
83
+ main_page files.first
84
+ title Configuration.for('project').name
85
+ options %w[ ]
86
+ output_dir "doc"
87
+ }
88
+
89
+ #-----------------------------------------------------------------------
90
+ # Rubyforge
91
+ #-----------------------------------------------------------------------
92
+ Configuration.for('rubyforge') {
93
+ project "copiousfreetime"
94
+ user "jjh"
95
+ host "rubyforge.org"
96
+ rdoc_location "#{user}@#{host}:/var/www/gforge-projects/#{project}/tyrantmanager/"
97
+ }
98
+
99
+
@@ -0,0 +1,38 @@
1
+ require 'tasks/config'
2
+
3
+ #-------------------------------------------------------------------------------
4
+ # Distribution and Packaging
5
+ #-------------------------------------------------------------------------------
6
+ if pkg_config = Configuration.for_if_exist?("packaging") then
7
+
8
+ require 'gemspec'
9
+ require 'rake/gempackagetask'
10
+ require 'rake/contrib/sshpublisher'
11
+
12
+ namespace :dist do
13
+
14
+ Rake::GemPackageTask.new(TyrantManager::GEM_SPEC) do |pkg|
15
+ pkg.need_tar = pkg_config.formats.tgz
16
+ pkg.need_zip = pkg_config.formats.zip
17
+ end
18
+
19
+ desc "Install as a gem"
20
+ task :install => [:clobber, :package] do
21
+ sh "sudo gem install pkg/#{TyrantManager::GEM_SPEC.full_name}.gem"
22
+ end
23
+
24
+ desc "Uninstall gem"
25
+ task :uninstall do
26
+ sh "sudo gem uninstall -x #{TyrantManager::GEM_SPEC.name}"
27
+ end
28
+
29
+ desc "dump gemspec"
30
+ task :gemspec do
31
+ puts TyrantManager::GEM_SPEC.to_ruby
32
+ end
33
+
34
+ desc "reinstall gem"
35
+ task :reinstall => [:uninstall, :repackage, :install]
36
+
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ require 'tasks/config'
2
+
3
+ #-----------------------------------------------------------------------
4
+ # Documentation
5
+ #-----------------------------------------------------------------------
6
+
7
+ if rdoc_config = Configuration.for_if_exist?('rdoc') then
8
+
9
+ namespace :doc do
10
+
11
+ require 'rdoc'
12
+ require 'rake/rdoctask'
13
+
14
+ # generating documentation locally
15
+ Rake::RDocTask.new do |rdoc|
16
+ rdoc.rdoc_dir = rdoc_config.output_dir
17
+ rdoc.options = rdoc_config.options
18
+ rdoc.rdoc_files = rdoc_config.files
19
+ rdoc.title = rdoc_config.title
20
+ rdoc.main = rdoc_config.main_page
21
+ end
22
+
23
+ if rubyforge_config = Configuration.for_if_exist?('rubyforge') then
24
+ desc "Deploy the RDoc documentation to #{rubyforge_config.rdoc_location}"
25
+ task :deploy => :rerdoc do
26
+ sh "rsync -zav --delete #{rdoc_config.output_dir}/ #{rubyforge_config.rdoc_location}"
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+