shibkit-meta_meta 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +52 -0
- data/Icon.png +0 -0
- data/LICENSE.txt +177 -0
- data/README.md +789 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/examples/biggest_entity_id.rb +4 -0
- data/lib/shibkit/meta_meta.rb +600 -0
- data/lib/shibkit/meta_meta/attribute.rb +73 -0
- data/lib/shibkit/meta_meta/config.rb +463 -0
- data/lib/shibkit/meta_meta/contact.rb +85 -0
- data/lib/shibkit/meta_meta/data/default_metadata/example_federation_metadata.xml +168 -0
- data/lib/shibkit/meta_meta/data/default_metadata/local_metadata.xml +66 -0
- data/lib/shibkit/meta_meta/data/default_metadata/uncommon_federation_metadata.xml +115 -0
- data/lib/shibkit/meta_meta/data/default_metadata_cache.yml +166 -0
- data/lib/shibkit/meta_meta/data/dev_sources.yml +86 -0
- data/lib/shibkit/meta_meta/data/real_sources.yml +163 -0
- data/lib/shibkit/meta_meta/entity.rb +219 -0
- data/lib/shibkit/meta_meta/federation.rb +161 -0
- data/lib/shibkit/meta_meta/idp.rb +81 -0
- data/lib/shibkit/meta_meta/logo.rb +216 -0
- data/lib/shibkit/meta_meta/metadata_item.rb +244 -0
- data/lib/shibkit/meta_meta/mixin/cached_downloads.rb +127 -0
- data/lib/shibkit/meta_meta/mixin/xpath_chores.rb +111 -0
- data/lib/shibkit/meta_meta/organisation.rb +73 -0
- data/lib/shibkit/meta_meta/provider.rb +195 -0
- data/lib/shibkit/meta_meta/provisioning/base.rb +33 -0
- data/lib/shibkit/meta_meta/requested_attribute.rb +29 -0
- data/lib/shibkit/meta_meta/service.rb +94 -0
- data/lib/shibkit/meta_meta/source.rb +558 -0
- data/lib/shibkit/meta_meta/sp.rb +79 -0
- data/shibkit-meta_meta.gemspec +154 -0
- data/spec/meta_meta/attribute/token +0 -0
- data/spec/meta_meta/config/autoloading_and_refreshing_spec.rb +72 -0
- data/spec/meta_meta/config/code_nspec.rb +13 -0
- data/spec/meta_meta/config/configuration_spec.rb +30 -0
- data/spec/meta_meta/config/creation_spec.rb +43 -0
- data/spec/meta_meta/config/downloading_and_caching_settings_spec.rb +216 -0
- data/spec/meta_meta/config/env_platform_settings.rb +129 -0
- data/spec/meta_meta/config/filtering_settings_spec.rb +123 -0
- data/spec/meta_meta/config/init.rb +8 -0
- data/spec/meta_meta/config/logger_settings_spec.rb +91 -0
- data/spec/meta_meta/config/smartcache_settings_spec.rb +110 -0
- data/spec/meta_meta/config/source_file_settings_spec.rb +99 -0
- data/spec/meta_meta/config/tagging_settings_spec.rb +81 -0
- data/spec/meta_meta/config/working_directory_settings_spec.rb +106 -0
- data/spec/meta_meta/config/xml_processing_settings_spec.rb +75 -0
- data/spec/meta_meta/contact/contact_oldspec.rb +0 -0
- data/spec/meta_meta/entity/entity_oldspec.rb +53 -0
- data/spec/meta_meta/federation/federation_oldspec.rb +0 -0
- data/spec/meta_meta/idp/token +0 -0
- data/spec/meta_meta/logo/token +0 -0
- data/spec/meta_meta/meta_meta/cache_example.yaml +141284 -0
- data/spec/meta_meta/meta_meta/meta_meta_spec.rb +269 -0
- data/spec/meta_meta/meta_meta/saved_sources.yaml +46 -0
- data/spec/meta_meta/metadata_item/token +0 -0
- data/spec/meta_meta/organisation/organisation_oldspec.rb +0 -0
- data/spec/meta_meta/provider/token +0 -0
- data/spec/meta_meta/requested_attribute/token +0 -0
- data/spec/meta_meta/service/token +0 -0
- data/spec/meta_meta/source/application_extras_spec.rb +234 -0
- data/spec/meta_meta/source/conversion_spec.rb +75 -0
- data/spec/meta_meta/source/creation_spec.rb +0 -0
- data/spec/meta_meta/source/downloads_and_caching_spec.rb +0 -0
- data/spec/meta_meta/source/federation_information_spec.rb +11 -0
- data/spec/meta_meta/source/fixtures.rb +24 -0
- data/spec/meta_meta/source/init.rb +1 -0
- data/spec/meta_meta/source/loading_and_saving_spec.rb +0 -0
- data/spec/meta_meta/source/metadata_details_spec.rb +0 -0
- data/spec/meta_meta/source/metadata_integrity_spec.rb +0 -0
- data/spec/meta_meta/source/selection_spec.rb +0 -0
- data/spec/meta_meta/source/source_oldspec.rb +353 -0
- data/spec/meta_meta/source/xml_parsing_spec.rb +0 -0
- data/spec/meta_meta/sp/token +0 -0
- data/spec/meta_meta/template +2 -0
- data/spec/moi/config_spec.rb +0 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/supply_xml.rb +0 -0
- metadata +320 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
2
|
+
|
3
|
+
describe Shibkit::MetaMeta::Config, "platform settings" do
|
4
|
+
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
6
|
+
before(:each) do
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
8
|
+
@config = @config_class.instance
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { @config }
|
12
|
+
|
13
|
+
it { should respond_to :environment= }
|
14
|
+
it { should respond_to :environment }
|
15
|
+
it { should respond_to :in_production? }
|
16
|
+
it { should respond_to :version }
|
17
|
+
it { should respond_to :platform }
|
18
|
+
|
19
|
+
it "should allow the #environment to be set" do
|
20
|
+
|
21
|
+
@config.environment = :porcupine
|
22
|
+
@config.environment.should == :porcupine
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should return an environment as a symbol when set" do
|
27
|
+
|
28
|
+
@config.environment = "testing"
|
29
|
+
@config.environment.should == :testing
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return :development from #environment by default" do
|
34
|
+
|
35
|
+
@config.environment.should == :development
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
context "if #environment has been set and #in_production is called" do
|
40
|
+
|
41
|
+
it "should return true if #environment is :production" do
|
42
|
+
|
43
|
+
@config.environment = :production
|
44
|
+
@config.in_production?.should be_true
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return false if #environment is :development" do
|
49
|
+
|
50
|
+
@config.environment = :development
|
51
|
+
@config.in_production?.should be_false
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return false if #environment is :test" do
|
56
|
+
|
57
|
+
@config.environment = :test
|
58
|
+
@config.in_production?.should be_false
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
context "If #environment has not been set and #in_production? has been called" do
|
65
|
+
|
66
|
+
it "should return true if Rails environment set and is production" do
|
67
|
+
|
68
|
+
Rails = Class.new unless defined? Rails # Smells...
|
69
|
+
Rails.stub_chain(:env,:production?).and_return(true)
|
70
|
+
|
71
|
+
@config.in_production?.should be_true
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return false if Rails environment set and is not :production" do
|
76
|
+
|
77
|
+
Rails = Class.new unless defined? Rails # Smells...
|
78
|
+
|
79
|
+
Rails.stub_chain(:env,:production?).and_return(false)
|
80
|
+
@config.in_production?.should be_false
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should return true if Rack environment set and is 'production'" do
|
85
|
+
|
86
|
+
Rack = Class.new unless defined? Rack # Smells...
|
87
|
+
RACK_ENV = 'production'
|
88
|
+
|
89
|
+
@config.in_production?.should be_true
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should return false if Rack environment set is not :production" do
|
94
|
+
|
95
|
+
Rack = Class.new unless defined Rack # Smells...
|
96
|
+
RACK_ENV = 'development'
|
97
|
+
|
98
|
+
@config.in_production?.should be_false
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should return false if environment, Rack and Rails are all undefined" do
|
103
|
+
|
104
|
+
@config.in_production?.should be_false
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should return a version string from #version with at least three parts" do
|
111
|
+
|
112
|
+
@config.version.should be_a_kind_of String
|
113
|
+
@config.version.split('.').count.should be > 2
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should return a version string matching the MAJOR.MINOR.PATCH pattern" do
|
118
|
+
|
119
|
+
@config.version.should match /^(\d+)\.(\d+)\.(\d+)/
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should return a string for #platform made up of three parts" do
|
124
|
+
|
125
|
+
@config.platform.split(':').count.should == 3
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
2
|
+
|
3
|
+
describe Shibkit::MetaMeta::Config, "source and federation filtering settings" do
|
4
|
+
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
6
|
+
before(:each) do
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
8
|
+
@config = @config_class.instance
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { @config }
|
12
|
+
|
13
|
+
it { should respond_to :only_use }
|
14
|
+
it { should respond_to :selected_federation_uris= }
|
15
|
+
it { should respond_to :selected_federation_uris }
|
16
|
+
it { should respond_to :selected_groups= }
|
17
|
+
it { should respond_to :selected_groups }
|
18
|
+
|
19
|
+
it "should allow #only_use as a alternative to #selected_federation_uris" do
|
20
|
+
|
21
|
+
@config.only_use("http://ukfederation.org.uk")
|
22
|
+
@config.selected_federation_uris.should == ["http://ukfederation.org.uk"]
|
23
|
+
|
24
|
+
uris_list = ["http://ukfederation.org.uk",'urn:mace:incommon']
|
25
|
+
@config.only_use(uris_list)
|
26
|
+
@config.selected_federation_uris.should =~ ["http://ukfederation.org.uk",'urn:mace:incommon']
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
it "selected federations URIs should always be returned as a list" do
|
31
|
+
|
32
|
+
@config.selected_federation_uris = "http://ukfederation.org.uk"
|
33
|
+
@config.selected_federation_uris.should be_kind_of Array
|
34
|
+
|
35
|
+
uris_list = ["http://ukfederation.org.uk",'urn:mace:incommon']
|
36
|
+
@config.selected_federation_uris = uris_list
|
37
|
+
@config.selected_federation_uris.should be_kind_of Array
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should allow selection of a single federation/source URI string to load" do
|
42
|
+
|
43
|
+
@config.selected_federation_uris = "http://ukfederation.org.uk"
|
44
|
+
@config.selected_federation_uris.should == ["http://ukfederation.org.uk"]
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should allow selection of a list of federations/sources (as URIs) to load" do
|
49
|
+
|
50
|
+
uris_list = ["http://ukfederation.org.uk",'urn:mace:incommon']
|
51
|
+
@config.selected_federation_uris = uris_list
|
52
|
+
@config.selected_federation_uris.should =~ ["http://ukfederation.org.uk",'urn:mace:incommon']
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should allow selected of a list of federations/sources from a Hash" do
|
57
|
+
|
58
|
+
uris_hash = {
|
59
|
+
'http://ukfederation.org.uk' => "potato",
|
60
|
+
'urn:mace:incommon' => 'potato'
|
61
|
+
}
|
62
|
+
|
63
|
+
@config.selected_federation_uris = uris_hash
|
64
|
+
@config.selected_federation_uris.should =~ ["http://ukfederation.org.uk",'urn:mace:incommon']
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should allow (re)selection of all sources/federations using :all or :everything symbols" do
|
69
|
+
|
70
|
+
@config.selected_federation_uris = :all
|
71
|
+
@config.selected_federation_uris.should == []
|
72
|
+
|
73
|
+
@config.selected_federation_uris = :everything
|
74
|
+
@config.selected_federation_uris.should == []
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should allow selection of all sources/federations by passing a nil or false to indicate no preference" do
|
79
|
+
|
80
|
+
@config.selected_federation_uris = nil
|
81
|
+
@config.selected_federation_uris.should == []
|
82
|
+
|
83
|
+
@config.selected_federation_uris = false
|
84
|
+
@config.selected_federation_uris.should == []
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should allow selection of all sources/federations by passing an empty array or hash" do
|
89
|
+
|
90
|
+
@config.selected_federation_uris = []
|
91
|
+
@config.selected_federation_uris.should == []
|
92
|
+
|
93
|
+
@config.selected_federation_uris = {}
|
94
|
+
@config.selected_federation_uris.should == []
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should allow selection of source one source group by name" do
|
99
|
+
|
100
|
+
@config.selected_groups = "spec_set_1"
|
101
|
+
@config.selected_groups.should =~ ['spec_set_1']
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should allow selection of a list of source groups by an array of names" do
|
106
|
+
|
107
|
+
@config.selected_groups = ["spec_set_1", "spec_set_2"]
|
108
|
+
@config.selected_groups.should =~ ["spec_set_1", "spec_set_2"]
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
it "selected source groups should always be returned as an array" do
|
113
|
+
|
114
|
+
@config.selected_groups = ["spec_set_1", "spec_set_2"]
|
115
|
+
@config.selected_groups.should be_kind_of Array
|
116
|
+
|
117
|
+
@config.selected_groups = "spec_set_1"
|
118
|
+
@config.selected_groups.should be_kind_of Array
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
2
|
+
|
3
|
+
describe Shibkit::MetaMeta::Config, "logging settings" do
|
4
|
+
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
6
|
+
before(:each) do
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
8
|
+
@config = @config_class.instance
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { @config }
|
12
|
+
|
13
|
+
it { should respond_to :logger= }
|
14
|
+
it { should respond_to :logger }
|
15
|
+
it { should respond_to :verbose_downloads= }
|
16
|
+
it { should respond_to :verbose_downloads? }
|
17
|
+
it { should respond_to :downloads_logger= }
|
18
|
+
it { should respond_to :downloads_logger }
|
19
|
+
|
20
|
+
it "should allow any standard Ruby logger to be set as #logger" do
|
21
|
+
|
22
|
+
log_to_stdout = Logger.new(STDOUT)
|
23
|
+
expect { @config.logger = log_to_stdout }.should_not raise_error
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should allow normal logger options to be set on logger" do
|
28
|
+
|
29
|
+
expect { @config.logger.level = ::Logger::DEBUG }.should_not raise_error
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should allow a standard Ruby logger to be set as the download logger" do
|
34
|
+
|
35
|
+
mrlog = Logger.new(STDOUT)
|
36
|
+
expect { @config.downloads_logger = mrlog }.should_not raise_error
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow normal logging options to be set on the download logger" do
|
41
|
+
|
42
|
+
expect { @config.logger.level = ::Logger::DEBUG }.should_not raise_error
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should allow the downloads logger to be set to the main logger" do
|
47
|
+
|
48
|
+
expect { @config.downloads_logger = @config.logger }.should_not raise_error
|
49
|
+
expect { @config.downloads_logger.info "Boo" }
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
context "by default" do
|
54
|
+
|
55
|
+
it "should have verbose downloads turned off" do
|
56
|
+
|
57
|
+
@config.verbose_downloads?.should be_false
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should not have a download logger specified" do
|
62
|
+
|
63
|
+
@config.downloads_logger.should be_nil
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should have a default logger" do
|
68
|
+
|
69
|
+
@config.logger.should be_kind_of Logger
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "The default logger" do
|
76
|
+
|
77
|
+
it "should output to STDOUT"
|
78
|
+
|
79
|
+
it "should be set to INFO output level" do
|
80
|
+
|
81
|
+
@config.logger.level.should == Logger::INFO
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should name the application as MetaMeta"
|
86
|
+
it "should include severity/loglevel in output"
|
87
|
+
it "should include data/time in output"
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '../../../spec_helper')
|
2
|
+
|
3
|
+
describe Shibkit::MetaMeta::Config, "Smartcache settings behavior" do
|
4
|
+
|
5
|
+
## Testing a singleton is tricky! Make a copy of the class each time
|
6
|
+
before(:each) do
|
7
|
+
@config_class = Shibkit::MetaMeta::Config.clone
|
8
|
+
@config = @config_class.instance
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { @config }
|
12
|
+
|
13
|
+
it { should respond_to :smartcache_expiry= }
|
14
|
+
it { should respond_to :smartcache_expiry }
|
15
|
+
it { should respond_to :smartcache_active= }
|
16
|
+
it { should respond_to :smartcache_active? }
|
17
|
+
it { should respond_to :smartcache_object_file }
|
18
|
+
it { should respond_to :smartcache_info_file }
|
19
|
+
|
20
|
+
it "should allow the #smartcache_expiry time to be set in seconds, with integer or string" do
|
21
|
+
|
22
|
+
@config.smartcache_expiry = 600
|
23
|
+
@config.smartcache_expiry.should == 600
|
24
|
+
@config.smartcache_expiry = "700"
|
25
|
+
@config.smartcache_expiry.should == 700
|
26
|
+
@config.smartcache_expiry = "800s"
|
27
|
+
@config.smartcache_expiry.should == 800
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return the #smartcache_expiry time to be returned as an integer" do
|
32
|
+
|
33
|
+
@config.smartcache_expiry = 400
|
34
|
+
@config.smartcache_expiry.should be_a_kind_of Fixnum
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should allow the smartcache to be enabled or disabled" do
|
39
|
+
|
40
|
+
@config.smartcache_active = true
|
41
|
+
@config.smartcache_active?.should be_true
|
42
|
+
|
43
|
+
@config.smartcache_active = false
|
44
|
+
@config.smartcache_active?.should be_false
|
45
|
+
|
46
|
+
@config.smartcache_active = nil
|
47
|
+
@config.smartcache_active?.should be_false
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should return if the smartcache is enabled or disabled" do
|
52
|
+
@config.smartcache_active = true
|
53
|
+
@config.smartcache_active?.should be_true
|
54
|
+
|
55
|
+
@config.smartcache_active = false
|
56
|
+
@config.smartcache_active?.should be_false
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return the location of the smartcache object data" do
|
61
|
+
|
62
|
+
@config.smartcache_object_file.should be_kind_of String
|
63
|
+
@config.smartcache_object_file.should match /\/smartcache.marshal$/
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return the location of the smartcache metadata" do
|
68
|
+
|
69
|
+
@config.smartcache_info_file.should be_kind_of String
|
70
|
+
@config.smartcache_info_file.should match /\/smartcache.yml$/
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should save smartcache files in the cache_root, even if it changes" do
|
75
|
+
|
76
|
+
@config.smartcache_object_file.should include @config.cache_root
|
77
|
+
@config.smartcache_object_file.should include @config.cache_root
|
78
|
+
|
79
|
+
@config.cache_root = "/tmp/another_root"
|
80
|
+
|
81
|
+
@config.smartcache_object_file.should include @config.cache_root
|
82
|
+
@config.smartcache_object_file.should include @config.cache_root
|
83
|
+
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
context "by default" do
|
88
|
+
|
89
|
+
it "should have smartcache enabled" do
|
90
|
+
|
91
|
+
@config.smartcache_active?.should == true
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should have smartcache set to expire in two hours" do
|
96
|
+
|
97
|
+
@config.smartcache_expiry.should == 3600
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should save smartcache files in the default cache_root" do
|
102
|
+
|
103
|
+
@config.smartcache_object_file.should include @config.cache_root
|
104
|
+
@config.smartcache_object_file.should include @config.cache_root
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|