bigbluebutton-api-ruby 1.0.0 → 1.1.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.
- data/.gitignore +0 -1
- data/.rvmrc +1 -1
- data/CHANGELOG.rdoc +5 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +39 -28
- data/Rakefile +4 -4
- data/bigbluebutton-api-ruby.gemspec +1 -1
- data/features/create_meetings.feature +10 -1
- data/features/end_meetings.feature +10 -1
- data/features/step_definitions/check_status_steps.rb +6 -4
- data/features/step_definitions/common_steps.rb +1 -0
- data/features/step_definitions/end_meetings_steps.rb +6 -6
- data/features/support/env.rb +1 -2
- data/features/support/features_helpers.rb +54 -0
- data/features/support/hooks.rb +4 -4
- data/lib/bigbluebutton_formatter.rb +1 -0
- metadata +13 -10
- data/extras/bigbluebutton_bot.rb +0 -64
- data/extras/download_bot_from.txt +0 -1
- data/features/support/api_tests/configs.rb +0 -51
data/.gitignore
CHANGED
data/.rvmrc
CHANGED
data/CHANGELOG.rdoc
CHANGED
data/Gemfile
CHANGED
@@ -8,8 +8,9 @@ group :developement do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
group :development, :test do
|
11
|
-
gem 'rspec', '~> 2.
|
11
|
+
gem 'rspec', '~> 2.10'
|
12
12
|
gem 'cucumber-rails'
|
13
13
|
gem 'forgery'
|
14
|
+
gem 'bbbot-ruby', :git => 'git://github.com/mconf/bbbot-ruby.git'
|
14
15
|
# gem 'rails_best_practices'
|
15
16
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,19 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/mconf/bbbot-ruby.git
|
3
|
+
revision: 83f3ccf88aa355260a791eb450a8d73f94049053
|
4
|
+
specs:
|
5
|
+
bbbot-ruby (0.0.1)
|
6
|
+
|
1
7
|
PATH
|
2
8
|
remote: .
|
3
9
|
specs:
|
4
|
-
bigbluebutton-api-ruby (1.
|
10
|
+
bigbluebutton-api-ruby (1.1.0)
|
5
11
|
xml-simple (>= 1.1.1)
|
6
12
|
|
7
13
|
GEM
|
8
14
|
remote: http://rubygems.org/
|
9
15
|
specs:
|
16
|
+
addressable (2.2.8)
|
10
17
|
builder (3.0.0)
|
11
18
|
capybara (1.1.2)
|
12
19
|
mime-types (>= 1.16)
|
@@ -15,46 +22,49 @@ GEM
|
|
15
22
|
rack-test (>= 0.5.4)
|
16
23
|
selenium-webdriver (~> 2.0)
|
17
24
|
xpath (~> 0.1.4)
|
18
|
-
childprocess (0.
|
25
|
+
childprocess (0.3.2)
|
19
26
|
ffi (~> 1.0.6)
|
20
|
-
cucumber (1.1.
|
27
|
+
cucumber (1.1.9)
|
21
28
|
builder (>= 2.1.2)
|
22
29
|
diff-lcs (>= 1.1.2)
|
23
|
-
gherkin (~> 2.
|
30
|
+
gherkin (~> 2.9.0)
|
24
31
|
json (>= 1.4.6)
|
25
32
|
term-ansicolor (>= 1.0.6)
|
26
|
-
cucumber-rails (1.
|
27
|
-
capybara (>= 1.1.
|
28
|
-
cucumber (>= 1.1.
|
33
|
+
cucumber-rails (1.3.0)
|
34
|
+
capybara (>= 1.1.2)
|
35
|
+
cucumber (>= 1.1.8)
|
29
36
|
nokogiri (>= 1.5.0)
|
30
37
|
diff-lcs (1.1.3)
|
31
38
|
ffi (1.0.11)
|
32
39
|
forgery (0.5.0)
|
33
|
-
gherkin (2.
|
40
|
+
gherkin (2.9.3)
|
34
41
|
json (>= 1.4.6)
|
35
|
-
json (1.
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
42
|
+
json (1.7.0)
|
43
|
+
libwebsocket (0.1.3)
|
44
|
+
addressable
|
45
|
+
mime-types (1.18)
|
46
|
+
multi_json (1.3.4)
|
47
|
+
nokogiri (1.5.2)
|
48
|
+
rack (1.4.1)
|
40
49
|
rack-test (0.6.1)
|
41
50
|
rack (>= 1.0)
|
42
51
|
rake (0.9.2.2)
|
43
|
-
rdoc (3.
|
52
|
+
rdoc (3.12)
|
44
53
|
json (~> 1.4)
|
45
|
-
rspec (2.
|
46
|
-
rspec-core (~> 2.
|
47
|
-
rspec-expectations (~> 2.
|
48
|
-
rspec-mocks (~> 2.
|
49
|
-
rspec-core (2.
|
50
|
-
rspec-expectations (2.
|
51
|
-
diff-lcs (~> 1.1.
|
52
|
-
rspec-mocks (2.
|
53
|
-
rubyzip (0.9.
|
54
|
-
selenium-webdriver (2.
|
55
|
-
childprocess (>= 0.2.
|
56
|
-
ffi (~> 1.0
|
57
|
-
|
54
|
+
rspec (2.10.0)
|
55
|
+
rspec-core (~> 2.10.0)
|
56
|
+
rspec-expectations (~> 2.10.0)
|
57
|
+
rspec-mocks (~> 2.10.0)
|
58
|
+
rspec-core (2.10.0)
|
59
|
+
rspec-expectations (2.10.0)
|
60
|
+
diff-lcs (~> 1.1.3)
|
61
|
+
rspec-mocks (2.10.0)
|
62
|
+
rubyzip (0.9.8)
|
63
|
+
selenium-webdriver (2.21.2)
|
64
|
+
childprocess (>= 0.2.5)
|
65
|
+
ffi (~> 1.0)
|
66
|
+
libwebsocket (~> 0.1.3)
|
67
|
+
multi_json (~> 1.0)
|
58
68
|
rubyzip
|
59
69
|
term-ansicolor (1.0.7)
|
60
70
|
xml-simple (1.1.1)
|
@@ -65,9 +75,10 @@ PLATFORMS
|
|
65
75
|
ruby
|
66
76
|
|
67
77
|
DEPENDENCIES
|
78
|
+
bbbot-ruby!
|
68
79
|
bigbluebutton-api-ruby!
|
69
80
|
cucumber-rails
|
70
81
|
forgery
|
71
82
|
rake (>= 0.9)
|
72
83
|
rdoc
|
73
|
-
rspec (~> 2.
|
84
|
+
rspec (~> 2.10)
|
data/Rakefile
CHANGED
@@ -17,11 +17,11 @@ Cucumber::Rake::Task.new do |t|
|
|
17
17
|
prepend = "--tags ~@need-bot"
|
18
18
|
end
|
19
19
|
|
20
|
-
# defaults to BBB 0.
|
21
|
-
if ENV["V"]
|
22
|
-
t.cucumber_opts = "--format pretty --tags ~@wip --tags @version-all,@version-08 #{prepend}"
|
23
|
-
else
|
20
|
+
# defaults to BBB 0.8
|
21
|
+
if ENV["V"] == "0.7" or ENV["VERSION"] == "0.7"
|
24
22
|
t.cucumber_opts = "--format pretty --tags ~@wip --tags @version-all,@version-07 #{prepend}"
|
23
|
+
else
|
24
|
+
t.cucumber_opts = "--format pretty --tags ~@wip --tags @version-all,@version-08 #{prepend}"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
@@ -2,7 +2,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'bigbluebutton-api-ruby'
|
5
|
-
s.version = '1.
|
5
|
+
s.version = '1.1.0'
|
6
6
|
s.extra_rdoc_files = ['README.rdoc', 'LICENSE', 'LICENSE_003', 'CHANGELOG.rdoc']
|
7
7
|
s.summary = 'Provides an interface to the BigBlueButton web meeting API (https://github.com/mconf/bigbluebutton-api-ruby)'
|
8
8
|
s.description = s.summary
|
@@ -19,7 +19,7 @@ Feature: Create rooms
|
|
19
19
|
When the create method is called with a duplicated meeting id
|
20
20
|
Then the response is an error with the key "idNotUnique"
|
21
21
|
|
22
|
-
@version-
|
22
|
+
@version-07 @need-bot
|
23
23
|
Scenario: Try to recreate a previously ended meeting
|
24
24
|
Given the create method is called
|
25
25
|
# note: meeting needs to be running to be ended in 0.7
|
@@ -27,3 +27,12 @@ Feature: Create rooms
|
|
27
27
|
And the meeting is forcibly ended
|
28
28
|
When the create method is called again with the same meeting id
|
29
29
|
Then the response is an error with the key "idNotUnique"
|
30
|
+
|
31
|
+
@version-08 @need-bot
|
32
|
+
Scenario: Try to recreate a previously ended meeting
|
33
|
+
Given the create method is called
|
34
|
+
And the meeting is running
|
35
|
+
And the meeting is forcibly ended
|
36
|
+
When the create method is called again with the same meeting id
|
37
|
+
Then the response is successful and well formatted
|
38
|
+
And the meeting exists in the server
|
@@ -2,7 +2,7 @@ Feature: End rooms
|
|
2
2
|
To stop a meeting using the API
|
3
3
|
One needs to be able to call 'end' to this meeting
|
4
4
|
|
5
|
-
@version-
|
5
|
+
@version-07 @need-bot
|
6
6
|
Scenario: End a meeting
|
7
7
|
Given that a meeting was created
|
8
8
|
And the meeting is running
|
@@ -11,6 +11,15 @@ Feature: End rooms
|
|
11
11
|
And the meeting should be ended
|
12
12
|
And the information returned by get_meeting_info is correct
|
13
13
|
|
14
|
+
@version-08 @need-bot
|
15
|
+
Scenario: End a meeting
|
16
|
+
Given that a meeting was created
|
17
|
+
And the meeting is running
|
18
|
+
When the method to end the meeting is called
|
19
|
+
Then the response is successful and well formatted
|
20
|
+
And the meeting should be ended
|
21
|
+
# the meeting may not exist anymore in 0.8
|
22
|
+
|
14
23
|
# in 0.7 ending a meeting that is not running generates an error
|
15
24
|
@version-07
|
16
25
|
Scenario: Try to end a meeting that is not running in 0.7
|
@@ -105,15 +105,17 @@ Then /^it shows the (\d+) attendees in the list$/ do |count|
|
|
105
105
|
@req.response[:attendees].size.should == 2
|
106
106
|
|
107
107
|
# check the start time that should be within 2 hours from now
|
108
|
+
# we check with this 2-hour time window to prevent errors if the
|
109
|
+
# server clock is different
|
108
110
|
@req.response[:startTime].should be_a(DateTime)
|
109
|
-
@req.response[:startTime].should < DateTime.now
|
110
|
-
@req.response[:startTime].should >= DateTime.now - (
|
111
|
+
@req.response[:startTime].should < DateTime.now + (1/24.0)
|
112
|
+
@req.response[:startTime].should >= DateTime.now - (1/24.0)
|
111
113
|
@req.response[:endTime].should be_nil
|
112
114
|
|
113
115
|
# in the bot being used, bots are always moderators with these names
|
114
116
|
@req.response[:attendees].sort! { |h1,h2| h1[:fullName] <=> h2[:fullName] }
|
115
|
-
@req.response[:attendees][0][:fullName].should == "
|
117
|
+
@req.response[:attendees][0][:fullName].should == "Bot 1"
|
116
118
|
@req.response[:attendees][0][:role].should == :moderator
|
117
|
-
@req.response[:attendees][1][:fullName].should == "
|
119
|
+
@req.response[:attendees][1][:fullName].should == "Bot 2"
|
118
120
|
@req.response[:attendees][1][:role].should == :moderator
|
119
121
|
end
|
@@ -90,6 +90,7 @@ When /^the response to the create method is successful and well formatted$/ do
|
|
90
90
|
@req.response[:messageKey].should == ""
|
91
91
|
@req.response[:message].should == ""
|
92
92
|
|
93
|
+
@req.opts = {} if @req.opts.nil?
|
93
94
|
if @req.opts.has_key?(:attendeePW)
|
94
95
|
@req.response[:attendeePW].should == @req.opts[:attendeePW]
|
95
96
|
else # auto generated password
|
@@ -17,7 +17,7 @@ When /^the meeting should be ended$/ do
|
|
17
17
|
sleep 1
|
18
18
|
response = @api.get_meetings
|
19
19
|
selected = response[:meetings].reject!{ |m| m[:meetingID] != @req.id }
|
20
|
-
running = selected[0][:running]
|
20
|
+
running = selected[0].nil? ? false : selected[0][:running]
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -38,12 +38,12 @@ When /^the information returned by get_meeting_info is correct$/ do
|
|
38
38
|
@req.response[:moderatorCount].should == 0
|
39
39
|
@req.response[:attendees].should == []
|
40
40
|
|
41
|
-
# start and end times
|
41
|
+
# start and end times should be within half an hour from now
|
42
42
|
@req.response[:startTime].should be_a(DateTime)
|
43
|
-
@req.response[:startTime].should < DateTime.now
|
44
|
-
@req.response[:startTime].should >= DateTime.now - (
|
43
|
+
@req.response[:startTime].should < DateTime.now + (0.5/24.0)
|
44
|
+
@req.response[:startTime].should >= DateTime.now - (0.5/24.0)
|
45
45
|
@req.response[:endTime].should be_a(DateTime)
|
46
|
-
@req.response[:endTime].should < DateTime.now
|
47
|
-
@req.response[:endTime].should >= DateTime.now - (
|
46
|
+
@req.response[:endTime].should < DateTime.now + (0.5/24.0)
|
47
|
+
@req.response[:endTime].should >= DateTime.now - (0.5/24.0)
|
48
48
|
@req.response[:endTime].should > @req.response[:startTime]
|
49
49
|
end
|
data/features/support/env.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
$:.unshift File.join(File.expand_path(File.dirname(__FILE__)), '..', '..', 'lib')
|
2
2
|
|
3
3
|
require 'bigbluebutton_api'
|
4
|
+
require 'bigbluebutton_bot'
|
4
5
|
require 'forgery'
|
5
6
|
Dir["#{File.dirname(__FILE__)}/../../spec/support/forgery/**/*.rb"].each { |f| require f }
|
6
|
-
|
7
|
-
Dir["#{File.dirname(__FILE__)}/../../extras/**/*.rb"].each { |f| require f }
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module BigBlueButton
|
2
|
+
module Features
|
3
|
+
|
4
|
+
# Test object that stores information about an API request
|
5
|
+
class APIRequest
|
6
|
+
attr_accessor :opts # options hash
|
7
|
+
attr_accessor :id # meetind id
|
8
|
+
attr_accessor :mod_pass # moderator password
|
9
|
+
attr_accessor :name # meeting name
|
10
|
+
attr_accessor :method # last api method called
|
11
|
+
attr_accessor :response # last api response
|
12
|
+
attr_accessor :exception # last exception
|
13
|
+
end
|
14
|
+
|
15
|
+
# Global configurations
|
16
|
+
module Configs
|
17
|
+
class << self
|
18
|
+
attr_accessor :cfg # configuration file
|
19
|
+
attr_accessor :cfg_server # shortcut to the choosen server configs
|
20
|
+
attr_accessor :req # api request
|
21
|
+
|
22
|
+
def initialize_cfg
|
23
|
+
config_file = File.join(File.dirname(__FILE__), '..', 'config.yml')
|
24
|
+
unless File.exist? config_file
|
25
|
+
throw Exception.new(config_file + " does not exists. Copy the example and configure your server.")
|
26
|
+
end
|
27
|
+
config = YAML.load_file(config_file)
|
28
|
+
config
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize_cfg_server
|
32
|
+
if ENV['SERVER']
|
33
|
+
unless self.cfg['servers'].has_key?(ENV['SERVER'])
|
34
|
+
throw Exception.new("Server #{ENV['SERVER']} does not exists in your configuration file.")
|
35
|
+
end
|
36
|
+
server = self.cfg['servers'][ENV['SERVER']]
|
37
|
+
else
|
38
|
+
server = self.cfg['servers'].first[1]
|
39
|
+
end
|
40
|
+
server['version'] = '0.7' unless server.has_key?('version')
|
41
|
+
server
|
42
|
+
end
|
43
|
+
|
44
|
+
def load
|
45
|
+
self.cfg = initialize_cfg
|
46
|
+
self.cfg_server = initialize_cfg_server
|
47
|
+
self.req = BigBlueButton::Features::APIRequest.new
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
data/features/support/hooks.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Before do
|
2
2
|
# stores the global configurations in variables that are easier to access
|
3
|
-
|
4
|
-
@config =
|
5
|
-
@config_server =
|
6
|
-
@req =
|
3
|
+
BigBlueButton::Features::Configs.load
|
4
|
+
@config = BigBlueButton::Features::Configs.cfg
|
5
|
+
@config_server = BigBlueButton::Features::Configs.cfg_server
|
6
|
+
@req = BigBlueButton::Features::Configs.req
|
7
7
|
end
|
8
8
|
|
9
9
|
After do |scenario|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bigbluebutton-api-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-05-05 00:00:00.
|
13
|
+
date: 2012-05-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: xml-simple
|
17
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,7 +22,12 @@ dependencies:
|
|
22
22
|
version: 1.1.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 1.1.1
|
26
31
|
description: Provides an interface to the BigBlueButton web meeting API (https://github.com/mconf/bigbluebutton-api-ruby)
|
27
32
|
email:
|
28
33
|
- leonardodaronco@gmail.com
|
@@ -51,8 +56,6 @@ files:
|
|
51
56
|
- examples/join_example.rb
|
52
57
|
- examples/overall_0.7_example.rb
|
53
58
|
- examples/prepare.rb
|
54
|
-
- extras/bigbluebutton_bot.rb
|
55
|
-
- extras/download_bot_from.txt
|
56
59
|
- extras/test-presentation.pdf
|
57
60
|
- features/check_status.feature
|
58
61
|
- features/config.yml.example
|
@@ -68,8 +71,8 @@ files:
|
|
68
71
|
- features/step_definitions/join_meetings_steps.rb
|
69
72
|
- features/step_definitions/pre_upload_slides_steps.rb
|
70
73
|
- features/step_definitions/recordings_steps.rb
|
71
|
-
- features/support/api_tests/configs.rb
|
72
74
|
- features/support/env.rb
|
75
|
+
- features/support/features_helpers.rb
|
73
76
|
- features/support/hooks.rb
|
74
77
|
- lib/bigbluebutton_api.rb
|
75
78
|
- lib/bigbluebutton_exception.rb
|
@@ -100,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
103
|
version: '0'
|
101
104
|
segments:
|
102
105
|
- 0
|
103
|
-
hash: -
|
106
|
+
hash: -937799181
|
104
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
108
|
none: false
|
106
109
|
requirements:
|
@@ -109,10 +112,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
112
|
version: '0'
|
110
113
|
segments:
|
111
114
|
- 0
|
112
|
-
hash: -
|
115
|
+
hash: -937799181
|
113
116
|
requirements: []
|
114
117
|
rubyforge_project:
|
115
|
-
rubygems_version: 1.8.
|
118
|
+
rubygems_version: 1.8.24
|
116
119
|
signing_key:
|
117
120
|
specification_version: 3
|
118
121
|
summary: Provides an interface to the BigBlueButton web meeting API (https://github.com/mconf/bigbluebutton-api-ruby)
|
data/extras/bigbluebutton_bot.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
class BigBlueButtonBot
|
2
|
-
BOT_FILENAME = "bbb-bot.jar"
|
3
|
-
@@pids = []
|
4
|
-
|
5
|
-
def initialize(api, meeting, salt="", count=1, timeout=20)
|
6
|
-
bot_file = File.join(File.dirname(__FILE__), BOT_FILENAME)
|
7
|
-
unless File.exist?(bot_file)
|
8
|
-
throw Exception.new(bot_file + " does not exists. See download_bot_from.txt and download the bot file.")
|
9
|
-
end
|
10
|
-
|
11
|
-
server = parse_server_url(api.url)
|
12
|
-
|
13
|
-
# note: fork + exec with these parameters was the only solution found to run the command in background
|
14
|
-
# and be able to wait for it (kill it) later on (see BigBlueButtonBot.finalize)
|
15
|
-
pid = Process.fork do
|
16
|
-
exec("java", "-jar", "#{bot_file}", "-s", "#{server}", "-p", "#{salt}", "-m", "#{meeting}", "-n", "#{count}")
|
17
|
-
|
18
|
-
# other options that didn't work:
|
19
|
-
# IO::popen("java -jar #{bot_file} -s \"#{server}\" -m \"#{meeting}\" -n #{count} >/dev/null")
|
20
|
-
# exec(["java", "-jar #{bot_file} -s \"#{server}\" -m \"#{meeting}\" -n #{count} >/dev/null"])
|
21
|
-
# exec("java -jar #{bot_file} -s \"#{server}\" -m \"#{meeting}\" -n #{count} >/dev/null")
|
22
|
-
# Process.exit!
|
23
|
-
end
|
24
|
-
@@pids << pid
|
25
|
-
|
26
|
-
wait_bot_startup(api, meeting, count, timeout)
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.finalize
|
30
|
-
@@pids.each do |pid|
|
31
|
-
p = Process.kill("TERM", pid)
|
32
|
-
Process.detach(pid)
|
33
|
-
end
|
34
|
-
@@pids.clear
|
35
|
-
end
|
36
|
-
|
37
|
-
def parse_server_url(full_url)
|
38
|
-
uri = URI.parse(full_url)
|
39
|
-
uri_s = uri.scheme + "://" + uri.host
|
40
|
-
uri_s = uri_s + ":" + uri.port.to_s if uri.port != uri.default_port
|
41
|
-
uri_s
|
42
|
-
end
|
43
|
-
|
44
|
-
# wait until the meeting is running with a certain number of participants
|
45
|
-
def wait_bot_startup(api, meeting, participants, timeout=20)
|
46
|
-
Timeout::timeout(timeout) do
|
47
|
-
stop_wait = false
|
48
|
-
while !stop_wait
|
49
|
-
sleep 1
|
50
|
-
|
51
|
-
# find the meeting and hope it is running
|
52
|
-
response = api.get_meetings
|
53
|
-
selected = response[:meetings].reject!{ |m| m[:meetingID] != meeting }
|
54
|
-
if selected and selected.size > 0 and selected[0][:running]
|
55
|
-
|
56
|
-
# check how many participants are in the meeting
|
57
|
-
pass = selected[0][:moderatorPW]
|
58
|
-
response = api.get_meeting_info(meeting, pass)
|
59
|
-
stop_wait = response[:participantCount] >= participants
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
https://github.com/daronco/mconf-mobile/blob/879f38e1be127f46b379c57a1933d3867b6bf14b/bbb-bot/bbb-bot.jar?raw=true
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module BigBlueButtonAPITests
|
2
|
-
|
3
|
-
# Test object that stores information about an API request
|
4
|
-
class APIRequest
|
5
|
-
attr_accessor :opts # options hash
|
6
|
-
attr_accessor :id # meetind id
|
7
|
-
attr_accessor :mod_pass # moderator password
|
8
|
-
attr_accessor :name # meeting name
|
9
|
-
attr_accessor :method # last api method called
|
10
|
-
attr_accessor :response # last api response
|
11
|
-
attr_accessor :exception # last exception
|
12
|
-
end
|
13
|
-
|
14
|
-
# Global configurations
|
15
|
-
module Configs
|
16
|
-
class << self
|
17
|
-
attr_accessor :cfg # configuration file
|
18
|
-
attr_accessor :cfg_server # shortcut to the choosen server configs
|
19
|
-
attr_accessor :req # api request
|
20
|
-
|
21
|
-
def initialize_cfg
|
22
|
-
config_file = File.join(File.dirname(__FILE__), '..', '..', 'config.yml')
|
23
|
-
unless File.exist?(config_file)
|
24
|
-
throw Exception.new(config_file + " does not exists. Copy the example and configure your server.")
|
25
|
-
end
|
26
|
-
config = YAML.load_file(config_file)
|
27
|
-
config
|
28
|
-
end
|
29
|
-
|
30
|
-
def initialize_cfg_server
|
31
|
-
if ENV['SERVER']
|
32
|
-
unless self.cfg['servers'].has_key?(ENV['SERVER'])
|
33
|
-
throw Exception.new("Server #{ENV['SERVER']} does not exists in your configuration file.")
|
34
|
-
end
|
35
|
-
server = self.cfg['servers'][ENV['SERVER']]
|
36
|
-
else
|
37
|
-
server = self.cfg['servers'][self.cfg['servers'].keys.first]
|
38
|
-
end
|
39
|
-
server['version'] = '0.7' unless server.has_key?('version')
|
40
|
-
server
|
41
|
-
end
|
42
|
-
|
43
|
-
def load
|
44
|
-
self.cfg = initialize_cfg
|
45
|
-
self.cfg_server = initialize_cfg_server
|
46
|
-
self.req = BigBlueButtonAPITests::APIRequest.new
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|