akamai_rspec 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a7d0d25f07249dc9449d8745ef64bdff88179da
4
- data.tar.gz: 6c792c083bc7ba702842035d68e202f81219f07a
3
+ metadata.gz: b838b063b3c410a172becfed5baf405a63f1a8ce
4
+ data.tar.gz: 9a3f78d72d254edf06b87eae7336b1f3a764a67f
5
5
  SHA512:
6
- metadata.gz: f7b7382b0992947fa6f30dbedc42487b1441c9182f571a236db3653288b21ba8b6640b7b316a6a04db185090a747c23847eac94686cbc154998d9a4e388d57b8
7
- data.tar.gz: cb95c3ca5e7ea8610201ccce9307a01d74336fc0db3c90ae8b2ea76b9256876f6ce5b0ee317d6d9561b37274c4d9bf55f34729df44abf931e724559d7e6264e3
6
+ metadata.gz: 002b45ff3aeb01872e98d84d1b4fde4c81acee696f80068a167d5a231deb6404656aa678d828570ae69725edd13700b271fa7defab5aaff36084f027984c37ce
7
+ data.tar.gz: fb59777170ccafbf8fa11c7b37d6f6277adf285a7bfda8b5bfe1359fdcaa395d56e09a3dc59312e89516e64917b66cd4a0f40d6226bcaa816a36ab3f071b9c3a
@@ -1,7 +1,7 @@
1
1
 
2
2
  module AkamaiRSpec
3
3
  module Matchers
4
- define :be_forwarded_to_index do |channel|
4
+ define :be_forwarded_to_path do |channel|
5
5
  match do |url|
6
6
  response = Request.get(url)
7
7
  session_info = response.headers[:x_akamai_session_info]
@@ -16,5 +16,7 @@ module AkamaiRSpec
16
16
  response.code == 200 && outcome_url == channel
17
17
  end
18
18
  end
19
+
20
+ alias_method :be_forwarded_to_index, :be_forwarded_to_path
19
21
  end
20
22
  end
@@ -6,11 +6,12 @@ require 'uri'
6
6
  module AkamaiRSpec
7
7
  module Matchers
8
8
 
9
- define :honour_origin_cache_headers do |origin, headers=:both|
9
+ define :honour_origin_cache_headers do |origin, headers=:both, max_clock_skew: 10|
10
10
  header_options = [:cache_control, :expires, :both]
11
11
  fail("Headers must be one of: #{header_options}") unless header_options.include? headers
12
12
 
13
13
  match do |url|
14
+ @max_clock_skew = max_clock_skew
14
15
  akamai_response = AkamaiRSpec::Request.get url
15
16
  url = "http://" + url unless url =~ /^http/
16
17
  origin_url = URI(url)
@@ -64,7 +65,7 @@ module AkamaiRSpec
64
65
  end
65
66
 
66
67
  def max_age_to_num(max_age)
67
- max_age.split('=').last.to_i
68
+ max_age.split('=').last.to_i rescue nil
68
69
  end
69
70
 
70
71
  def clean_max_age(cc_directives)
@@ -76,7 +77,9 @@ module AkamaiRSpec
76
77
  def check_max_age(origin_cc_directives, akamai_cc_directives)
77
78
  origin_max_age, origin_cc_directives = clean_max_age(origin_cc_directives)
78
79
  akamai_max_age, akamai_cc_directives = clean_max_age(akamai_cc_directives)
79
- if akamai_max_age > origin_max_age
80
+ fail "Akamai sent a max-age but Origin did not" if akamai_max_age && origin_max_age.nil?
81
+
82
+ if (akamai_max_age && origin_max_age) && (akamai_max_age > origin_max_age)
80
83
  fail "Akamai sent a max-age greater than Origin's: #{akamai_max_age} > #{origin_max_age}"
81
84
  end
82
85
  return origin_cc_directives, akamai_cc_directives
@@ -108,14 +111,25 @@ module AkamaiRSpec
108
111
  def check_expires(origin_response, akamai_response, headers)
109
112
  if [:both, :expires].include? headers
110
113
  origin_expires, akamai_expires = expires(origin_response, akamai_response)
111
- validate_expires(origin_expires, akamai_expires)
114
+
115
+ fail "Origin sent 'Expires: #{
116
+ origin_response.headers[:expires]
117
+ }' but Akamai sent 'Expires: #{
118
+ akamai_response.headers[:expires]
119
+ }', varies by #{
120
+ expires_diff origin_expires, akamai_expires
121
+ } seconds" unless expires_match?(origin_expires, akamai_expires)
122
+
112
123
  end
113
124
  end
114
125
 
115
- def validate_expires(origin, akamai)
116
- unless akamai.to_i == origin.to_i
117
- fail "Origin sent 'Expires: #{origin}' but Akamai sent 'Expires: #{akamai}'"
118
- end
126
+ def expires_match?(origin, akamai)
127
+ # Allow some clock skew
128
+ expires_diff(origin, akamai) <= @max_clock_skew
129
+ end
130
+
131
+ def expires_diff(origin, akamai)
132
+ ((akamai || Time.now).to_i - (origin || Time.now).to_i).abs
119
133
  end
120
134
 
121
135
  def expires(origin_response, akamai_response)
@@ -28,8 +28,8 @@ module AkamaiRSpec
28
28
 
29
29
  define :be_verifiably_secure do
30
30
  match do |url|
31
- return false if URI(url).scheme == "http"
32
31
  url = "https://#{url}" unless URI(url).scheme
32
+ url = url.gsub(/^http:/, 'https:')
33
33
  begin
34
34
  # Avoid AkamaiRspec::Request as it turns off SSL checking
35
35
  @response = RestClient::Request.execute(
@@ -41,14 +41,14 @@ module AkamaiRSpec
41
41
  return true
42
42
  rescue RestClient::MaxRedirectsReached
43
43
  return true # Securely sent a redirect
44
- rescue => e
44
+ rescue Exception => e
45
45
  @error = e
46
46
  return false
47
47
  end
48
48
  end
49
49
 
50
50
  failure_message do |url|
51
- "got error #{@error} fetching #{@response}"
51
+ "got error #{@error.inspect} fetching #{@response}"
52
52
  end
53
53
  end
54
54
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akamai_rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bianca Gibson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-11-04 00:00:00.000000000 Z
12
+ date: 2016-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client