Skip to content

Commit 189719e

Browse files
committed
some more caching tests
1 parent 10300f1 commit 189719e

File tree

5 files changed

+84
-36
lines changed

5 files changed

+84
-36
lines changed

dashboard/app/controllers/activities_controller.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ def milestone
4747

4848
# Store the image only if the image is set, and the image has not been saved
4949
if params[:image] && @level_source.try(:id)
50-
# don't create new level source images temporarily
5150
@level_source_image = LevelSourceImage.find_by(level_source_id: @level_source.id)
5251
unless @level_source_image
5352
@level_source_image = LevelSourceImage.new(level_source_id: @level_source.id)

dashboard/app/models/level_source.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
require 'digest/md5'
22

3-
def level_source_cache()
4-
@@level_sources_redis ||= rack_env?(:production) ? Redis.connect(url:CDO.level_sources_redis_url) : Hash.new
5-
end
6-
73
# A specific solution attempt for a specific level
84
class LevelSource < ActiveRecord::Base
95
belongs_to :level
@@ -19,12 +15,20 @@ class LevelSource < ActiveRecord::Base
1915
# A level_source is considered to be standardized if it does not have this.
2016
XMLNS_STRING = ' xmlns="http://www.w3.org/1999/xhtml"'
2117

18+
def LevelSource.cache_enabled?
19+
rack_env?(:production) || @@cache_enabled
20+
end
21+
22+
def LevelSource.level_source_cache()
23+
@@level_sources_redis ||= rack_env?(:production) ? Redis.connect(url:CDO.level_sources_redis_url) : Hash.new
24+
end
25+
2226
def self.find_identical_or_create(level, data)
2327
md5 = Digest::MD5.hexdigest(data)
2428

2529
redis_key = "v5-#{level.id}-#{md5}"
2630

27-
cached_json = level_source_cache[redis_key] if rack_env?(:production)
31+
cached_json = LevelSource.level_source_cache[redis_key] if LevelSource.cache_enabled?
2832
level_source_object = OpenStruct.new(JSON.parse(cached_json)) if cached_json
2933

3034
unless level_source_object
@@ -34,7 +38,7 @@ def self.find_identical_or_create(level, data)
3438
return nil unless level_source_object
3539

3640
level_source_hash = {id:level_source_object.id, hidden:level_source_object.hidden}
37-
level_source_cache[redis_key] = level_source_hash.to_json if rack_env?(:production)
41+
LevelSource.level_source_cache[redis_key] = level_source_hash.to_json if LevelSource.cache_enabled?
3842

3943
level_source_object = OpenStruct.new(level_source_hash)
4044
end

dashboard/app/views/shared/_user_stats.html.haml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
- script = @script || (user && user.primary_script) || Script.twenty_hour_script
2-
- script_levels = user ? user.levels_from_script(script) : script.script_levels.includes(:script, :stage, level: :game)
2+
- script_levels = user ? user.levels_from_script(script) : script.script_levels
33
-# concept_progress = user ? user.concept_progress : nil
44
55
.user-stats-block

dashboard/config/environments/test.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,7 @@
4343

4444
# disable this for test by default, it won't make much sense if we keep wiping the db
4545
CDO.disable_s3_image_uploads = true
46+
47+
# see stack traces around sql queries in the log
48+
ActiveRecordQueryTrace.enabled = true
4649
end
Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
11
require 'test_helper'
22

33
class CachingTest < ActionDispatch::IntegrationTest
4-
5-
setup do
6-
Script.send(:clear_cache)
4+
5+
def setup
6+
Script.clear_cache
7+
LevelSource.class_variable_set(:@@cache_enabled, true)
78
end
8-
9-
test "should get show of frozen level 1" do
10-
get '/s/frozen/stage/1/puzzle/1'
11-
assert_response :success
129

10+
def no_database
1311
Rails.logger.info '--------------'
14-
Rails.logger.info 'SECOND REQUEST'
12+
Rails.logger.info 'DISCONNECTING DATABASE'
1513
Rails.logger.info '--------------'
1614

1715
ActiveRecord::Base.connection.disconnect!
16+
end
17+
18+
test "should get /s/frozen" do
19+
get '/s/frozen'
20+
assert_response :success
21+
22+
no_database
23+
24+
get '/s/frozen'
25+
assert_response :success
26+
end
27+
28+
test "should get show of frozen level 1" do
29+
get '/s/frozen/stage/1/puzzle/1'
30+
assert_response :success
31+
32+
no_database
33+
1834
get '/s/frozen/stage/1/puzzle/1'
1935
assert_response :success
2036
end
@@ -23,11 +39,8 @@ class CachingTest < ActionDispatch::IntegrationTest
2339
get '/s/frozen/stage/1/puzzle/10'
2440
assert_response :success
2541

26-
Rails.logger.info '--------------'
27-
Rails.logger.info 'SECOND REQUEST'
28-
Rails.logger.info '--------------'
29-
30-
ActiveRecord::Base.connection.disconnect!
42+
no_database
43+
3144
get '/s/frozen/stage/1/puzzle/10'
3245
assert_response :success
3346
end
@@ -36,11 +49,8 @@ class CachingTest < ActionDispatch::IntegrationTest
3649
get '/s/frozen/stage/1/puzzle/20'
3750
assert_response :success
3851

39-
Rails.logger.info '--------------'
40-
Rails.logger.info 'SECOND REQUEST'
41-
Rails.logger.info '--------------'
42-
43-
ActiveRecord::Base.connection.disconnect!
52+
no_database
53+
4454
get '/s/frozen/stage/1/puzzle/20'
4555
assert_response :success
4656
end
@@ -50,28 +60,60 @@ class CachingTest < ActionDispatch::IntegrationTest
5060
get '/s/frozen/stage/1/puzzle/1'
5161
assert_response :success
5262

53-
Rails.logger.info '--------------'
54-
Rails.logger.info 'SECOND REQUEST'
55-
Rails.logger.info '--------------'
56-
57-
ActiveRecord::Base.connection.disconnect!
63+
no_database
64+
5865
get '/s/frozen/stage/1/puzzle/10'
5966
assert_response :success
6067
end
6168

69+
test "post milestone to frozen passing" do
70+
sl = Script.find_by_name('frozen').script_levels[2]
71+
params = {program: 'fake program', testResult: 100, result: 'true'}
72+
73+
post "milestone/0/#{sl.id}", params
74+
assert_response 200
75+
76+
no_database
77+
78+
post "milestone/0/#{sl.id}", params
79+
assert_response 200
80+
end
81+
82+
test "post milestone to frozen failing" do
83+
sl = Script.find_by_name('frozen').script_levels[2]
84+
params = {program: 'fake program', testResult: 5, result: 'false'}
85+
86+
post "milestone/0/#{sl.id}", params
87+
assert_response 200
88+
89+
no_database
90+
91+
post "milestone/0/#{sl.id}", params
92+
assert_response 200
93+
end
94+
6295

6396
# course1 is not caching yet
6497
# test "should get show of course1 level 1 and then level 10" do
6598
# get '/s/course1/stage/1/puzzle/1'
6699
# assert_response :success
67100

68-
# Rails.logger.info '--------------'
69-
# Rails.logger.info 'SECOND REQUEST'
70-
# Rails.logger.info '--------------'
71-
72-
# ActiveRecord::Base.connection.disconnect!
101+
# no_database
102+
73103
# get '/s/course1/stage/1/puzzle/10'
74104
# assert_response :success
75105
# end
76106

107+
# test "post milestone to course1" do
108+
# sl = Script.find_by_name('course1').script_levels[2]
109+
110+
# post "milestone/0/#{sl.id}"
111+
# assert_response 200
112+
113+
# no_database
114+
115+
# post "milestone/0/#{sl.id}"
116+
# assert_response 200
117+
# end
118+
77119
end

0 commit comments

Comments
 (0)