knjappserver 0.0.15 → 0.0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/Gemfile +4 -2
  2. data/Gemfile.lock +24 -10
  3. data/README.rdoc +298 -1
  4. data/VERSION +1 -1
  5. data/bin/check_running.rb +2 -2
  6. data/knjappserver.gemspec +23 -5
  7. data/lib/files/database_schema.rb +124 -111
  8. data/lib/include/class_customio.rb +19 -5
  9. data/lib/include/class_erbhandler.rb +5 -22
  10. data/lib/include/class_httpresp.rb +66 -28
  11. data/lib/include/class_httpserver.rb +27 -14
  12. data/lib/include/class_httpsession.rb +161 -212
  13. data/lib/include/class_httpsession_contentgroup.rb +144 -0
  14. data/lib/include/class_httpsession_knjengine.rb +33 -68
  15. data/lib/include/class_httpsession_mongrel.rb +1 -1
  16. data/lib/include/class_httpsession_webrick.rb +1 -1
  17. data/lib/include/class_knjappserver.rb +105 -130
  18. data/lib/include/class_knjappserver_cleaner.rb +20 -13
  19. data/lib/include/class_knjappserver_cmdline.rb +44 -0
  20. data/lib/include/class_knjappserver_errors.rb +4 -1
  21. data/lib/include/class_knjappserver_logging.rb +48 -8
  22. data/lib/include/class_knjappserver_mailing.rb +36 -14
  23. data/lib/include/class_knjappserver_sessions.rb +78 -0
  24. data/lib/include/class_knjappserver_threadding.rb +18 -45
  25. data/lib/include/class_knjappserver_threadding_timeout.rb +78 -0
  26. data/lib/include/class_knjappserver_translations.rb +30 -0
  27. data/lib/include/class_knjappserver_web.rb +55 -3
  28. data/lib/include/class_log.rb +31 -3
  29. data/lib/include/class_log_access.rb +0 -15
  30. data/lib/include/class_log_data.rb +0 -15
  31. data/lib/include/class_log_data_link.rb +1 -14
  32. data/lib/include/class_log_data_value.rb +5 -17
  33. data/lib/include/class_session.rb +6 -18
  34. data/lib/include/magic_methods.rb +12 -14
  35. data/lib/pages/benchmark.rhtml +0 -0
  36. data/lib/pages/benchmark_print.rhtml +14 -0
  37. data/lib/pages/benchmark_simple.rhtml +3 -0
  38. data/lib/pages/benchmark_threadded_content.rhtml +21 -0
  39. data/lib/pages/spec.rhtml +26 -0
  40. data/lib/pages/spec_test_multiple_clients.rhtml +3 -0
  41. data/lib/pages/spec_threadded_content.rhtml +38 -0
  42. data/lib/scripts/benchmark.rb +65 -0
  43. data/spec/knjappserver_spec.rb +87 -43
  44. metadata +54 -20
@@ -0,0 +1,3 @@
1
+ <%
2
+ Knj::Php.print_r([_get, _post, _meta])
3
+ %>
@@ -0,0 +1,21 @@
1
+ <%
2
+ print "1"
3
+
4
+ _kas.threadded_content do
5
+ sleep 0.1
6
+ print "2"
7
+ end
8
+
9
+ _kas.threadded_content do
10
+ print "3"
11
+ end
12
+
13
+ print "4"
14
+
15
+ _kas.threadded_content do
16
+ sleep 0.1
17
+ print "5"
18
+ end
19
+
20
+ print "6"
21
+ %>
data/lib/pages/spec.rhtml CHANGED
@@ -1,9 +1,35 @@
1
1
  <%
2
+ if _get["choice"] == "test_cookie"
3
+ _kas.cookie(
4
+ "name" => "TestCookie",
5
+ "value" => "TestValue",
6
+ "expires" => Time.new + 3600 #add an hour
7
+ )
8
+ _kas.cookie(
9
+ "name" => "TestCookie2",
10
+ "value" => "TestValue2",
11
+ "expires" => Time.new + 7200 #add an hour
12
+ )
13
+ _kas.cookie(
14
+ "name" => "TestCookie3",
15
+ "value" => "TestValue 3 ",
16
+ "expires" => Time.new + 1200
17
+ )
18
+ exit
19
+ end
20
+
21
+ if _get["choice"] == "get_cookies"
22
+ print Knj::Php.json_encode(_cookie)
23
+ exit
24
+ end
25
+
2
26
  _kas.header("TestHeader", "NormalHeader")
3
27
  _kas.header_raw("TestRaw: RawHeader")
4
28
 
5
29
  if _meta["REQUEST_METHOD"] == "POST"
6
30
  print _post["postdata"]
31
+ elsif _get["choice"] == "check_get_parse"
32
+ print _get["value"]
7
33
  else
8
34
  print "Test"
9
35
  end
@@ -0,0 +1,3 @@
1
+ <%
2
+
3
+ %>
@@ -0,0 +1,38 @@
1
+ <%
2
+ _kas.threadded_content do
3
+ sleep 0.2
4
+ print "1"
5
+ end
6
+
7
+ print "2"
8
+
9
+ _kas.threadded_content do
10
+ sleep 0.1
11
+
12
+ _kas.threadded_content do
13
+ sleep 0.1
14
+ print "3"
15
+
16
+ sleep 0.1
17
+
18
+ _kas.threadded_content do
19
+ print "4"
20
+ sleep 0.1
21
+ print "5"
22
+ end
23
+
24
+ _kas.threadded_content do
25
+ print "6"
26
+ print "7"
27
+ end
28
+ end
29
+
30
+ print "8"
31
+ end
32
+
33
+ _kas.threadded_content do
34
+ print "9"
35
+ end
36
+
37
+ print "10"
38
+ %>
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env ruby1.9.1
2
+
3
+ Dir.chdir(File.dirname(__FILE__))
4
+ require "rubygems"
5
+ require "../knjappserver.rb"
6
+ require "knjrbfw"
7
+ require "erubis"
8
+ require "sqlite3" if RUBY_ENGINE != "jruby"
9
+ require "knj/autoload"
10
+
11
+ begin
12
+ args = {
13
+ :filename => "benchmark.rhtml"
14
+ }
15
+
16
+ OptionParser.new do |opts|
17
+ opts.banner = "Usage: benchmark.rb [options]"
18
+
19
+ opts.on("-f FILENAME", "--file FILENAME", "The filename that should be requested from the server.") do |t|
20
+ args[:filename] = t
21
+ end
22
+ end.parse!
23
+ end
24
+
25
+ db_path = "#{File.dirname(__FILE__)}/benchmark_db.sqlite3"
26
+
27
+ appsrv = Knjappserver.new(
28
+ :debug => false,
29
+ :port => 15081,
30
+ :doc_root => "#{File.dirname(__FILE__)}/../pages",
31
+ :db_args => {
32
+ :type => "sqlite3",
33
+ :path => db_path,
34
+ :return_keys => "symbols"
35
+ }
36
+ )
37
+ appsrv.start
38
+
39
+ count_requests = 0
40
+ 1.upto(100) do |count_thread|
41
+ Knj::Thread.new(count_thread) do |count_thread|
42
+ print "Thread #{count_thread} started.\n"
43
+
44
+ http = Knj::Http2.new(
45
+ :host => "localhost",
46
+ :port => 15081,
47
+ :user_agent => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1; debugid:#{count_thread}) Gecko/20060111 Firefox/3.6.0.1",
48
+ :debug => false
49
+ )
50
+
51
+ loop do
52
+ resp = http.get(args[:filename])
53
+ count_requests += 1
54
+ end
55
+ end
56
+ end
57
+
58
+ loop do
59
+ last_count = count_requests
60
+ sleep 1
61
+ counts_betw = count_requests - last_count
62
+ print "#{counts_betw} /sec\n"
63
+ end
64
+
65
+ appsrv.join
@@ -11,70 +11,57 @@ describe "Knjappserver" do
11
11
  File.unlink(db_path) if File.exists?(db_path)
12
12
 
13
13
  require "knj/knjdb/libknjdb.rb"
14
- require "sqlite3"
15
- db = Knj::Db.new(
16
- :type => "sqlite3",
17
- :path => db_path,
18
- :return_keys => "symbols"
19
- )
14
+ require "sqlite3" if RUBY_ENGINE != "jruby"
15
+
16
+ begin
17
+ db = Knj::Db.new(
18
+ :type => "sqlite3",
19
+ :path => db_path,
20
+ :return_keys => "symbols"
21
+ )
22
+ rescue => e
23
+ STDOUT.puts e.inspect
24
+ STDOUT.puts e.backtrace
25
+
26
+ raise e
27
+ end
20
28
 
21
29
  erbhandler = Knjappserver::ERBHandler.new
22
30
 
31
+ if RUBY_ENGINE == "jruby"
32
+ mail_require = false
33
+ else
34
+ mail_require = true
35
+ end
36
+
23
37
  $appserver = Knjappserver.new(
24
38
  :debug => false,
25
39
  :autorestart => false,
26
- :autoload => false,
27
- :verbose => false,
28
- :title => "knjTasks",
40
+ :title => "SpecTest",
29
41
  :port => 1515,
30
- :host => "0.0.0.0",
31
- :default_page => "index.rhtml",
32
42
  :doc_root => "#{File.dirname(__FILE__)}/../lib/pages",
33
- :hostname => false,
34
- :default_filetype => "text/html",
35
- :engine_knjengine => true,
36
43
  :locales_gettext_funcs => true,
37
44
  :locale_default => "da_DK",
38
- :max_requests_working => 5,
39
- :filetypes => {
40
- :jpg => "image/jpeg",
41
- :gif => "image/gif",
42
- :png => "image/png",
43
- :html => "text/html",
44
- :htm => "text/html",
45
- :rhtml => "text/html",
46
- :css => "text/css",
47
- :xml => "text/xml",
48
- :js => "text/javascript"
49
- },
50
- :handlers => [
51
- {
52
- :file_ext => "rhtml",
53
- :callback => erbhandler.method(:erb_handler)
54
- },{
55
- :path => "/fckeditor",
56
- :mount => "/usr/share/fckeditor"
57
- }
58
- ],
59
- :db => db
45
+ :db => db,
46
+ :mail_require => mail_require
60
47
  )
61
48
 
62
49
  $appserver.vars[:test] = "kasper"
63
50
  $appserver.define_magic_var(:_testvar1, "Kasper")
64
51
  $appserver.define_magic_var(:_testvar2, "Johansen")
65
- $appserver.update_db
66
52
  $appserver.start
67
53
  end
68
54
 
69
- it "should be able to mount FCKeditor dir to /usr/share/fckeditor" do
70
-
71
- end
72
-
73
55
  it "should be able to handle a GET-request." do
56
+ #Check that we are able to perform a simple GET request and get the correct data back.
74
57
  require "knj/http"
75
58
  $http = Knj::Http.new("host" => "localhost", "port" => 1515)
76
59
  data = $http.get("/spec.rhtml")
77
- raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s.strip != "Test"
60
+ raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s != "Test"
61
+
62
+ #Check that URL-decoding are being done.
63
+ data = $http.get("/spec.rhtml?choice=check_get_parse&value=#{Knj::Php.urlencode("gfx/nopic.png")}")
64
+ raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s != "gfx/nopic.png"
78
65
  end
79
66
 
80
67
  it "should be able to handle a HEAD-request." do
@@ -100,12 +87,69 @@ describe "Knjappserver" do
100
87
  end
101
88
  end
102
89
 
103
- it "it should be able to use the header-methods." do
90
+ it "should be able to use the header-methods." do
104
91
  data = $http.get("/spec.rhtml")
105
92
  raise "Normal header data could not be detected." if data["response"].header["testheader"] != "NormalHeader"
106
93
  raise "Raw header data could not be detected." if data["response"].header["testraw"]!= "RawHeader"
107
94
  end
108
95
 
96
+ it "should be able to set and get multiple cookies at the same time." do
97
+ require "json"
98
+
99
+ data = $http.get("/spec.rhtml?choice=test_cookie")
100
+ raise data["data"] if data["data"].to_s.length > 0
101
+
102
+ data = $http.get("/spec.rhtml?choice=get_cookies")
103
+ parsed = Knj::Php.json_decode(data["data"])
104
+
105
+ raise "Unexpected value for 'TestCookie': '#{parsed["TestCookie"]}'." if parsed["TestCookie"] != "TestValue"
106
+ raise "Unexpected value for 'TestCookie2': '#{parsed["TestCookie2"]}'." if parsed["TestCookie2"] != "TestValue2"
107
+ raise "Unexpected value for 'TestCookie3': '#{parsed["TestCookie3"]}'." if parsed["TestCookie3"] != "TestValue 3 "
108
+ end
109
+
110
+ it "should be able to run the rspec_threadded_content test correctly." do
111
+ data = $http.get("/spec_threadded_content.rhtml")
112
+
113
+ if data["data"] != "12345678910"
114
+ raise data["data"].to_s
115
+ end
116
+ end
117
+
118
+ it "should be able to add a timeout." do
119
+ $break_timeout = false
120
+ timeout = $appserver.timeout(:time => 1) do
121
+ $break_timeout = true
122
+ end
123
+
124
+ Timeout.timeout(2) do
125
+ loop do
126
+ break if $break_timeout
127
+ sleep 0.1
128
+ end
129
+ end
130
+ end
131
+
132
+ it "should be able to stop a timeout." do
133
+ $timeout_runned = false
134
+ timeout = $appserver.timeout(:time => 1) do
135
+ $timeout_runned = true
136
+ end
137
+
138
+ sleep 0.5
139
+ timeout.stop
140
+
141
+ begin
142
+ Timeout.timeout(1.5) do
143
+ loop do
144
+ raise "The timeout ran even though stop was called?" if $timeout_runned
145
+ sleep 0.1
146
+ end
147
+ end
148
+ rescue Timeout::Error
149
+ #the timeout didnt run - and it shouldnt so dont do anything.
150
+ end
151
+ end
152
+
109
153
  it "should be able to stop." do
110
154
  $appserver.stop
111
155
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knjappserver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,23 +9,23 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-03 00:00:00.000000000 +02:00
12
+ date: 2011-11-15 00:00:00.000000000 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: knjrbfw
17
- requirement: &23669640 !ruby/object:Gem::Requirement
17
+ requirement: &19883700 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.0.7
22
+ version: 0.0.8
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *23669640
25
+ version_requirements: *19883700
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: erubis
28
- requirement: &23669120 !ruby/object:Gem::Requirement
28
+ requirement: &19796260 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *23669120
36
+ version_requirements: *19796260
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: knjdbrevision
39
- requirement: &23668560 !ruby/object:Gem::Requirement
39
+ requirement: &19795540 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,21 @@ dependencies:
44
44
  version: 0.0.2
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *23668560
47
+ version_requirements: *19795540
48
+ - !ruby/object:Gem::Dependency
49
+ name: mail
50
+ requirement: &19794800 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *19794800
48
59
  - !ruby/object:Gem::Dependency
49
60
  name: rspec
50
- requirement: &23668000 !ruby/object:Gem::Requirement
61
+ requirement: &19794080 !ruby/object:Gem::Requirement
51
62
  none: false
52
63
  requirements:
53
64
  - - ~>
@@ -55,10 +66,10 @@ dependencies:
55
66
  version: 2.3.0
56
67
  type: :development
57
68
  prerelease: false
58
- version_requirements: *23668000
69
+ version_requirements: *19794080
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: bundler
61
- requirement: &23667380 !ruby/object:Gem::Requirement
72
+ requirement: &19793340 !ruby/object:Gem::Requirement
62
73
  none: false
63
74
  requirements:
64
75
  - - ~>
@@ -66,10 +77,10 @@ dependencies:
66
77
  version: 1.0.0
67
78
  type: :development
68
79
  prerelease: false
69
- version_requirements: *23667380
80
+ version_requirements: *19793340
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: jeweler
72
- requirement: &23666700 !ruby/object:Gem::Requirement
83
+ requirement: &19792580 !ruby/object:Gem::Requirement
73
84
  none: false
74
85
  requirements:
75
86
  - - ~>
@@ -77,10 +88,10 @@ dependencies:
77
88
  version: 1.6.3
78
89
  type: :development
79
90
  prerelease: false
80
- version_requirements: *23666700
91
+ version_requirements: *19792580
81
92
  - !ruby/object:Gem::Dependency
82
93
  name: rcov
83
- requirement: &23666040 !ruby/object:Gem::Requirement
94
+ requirement: &19791860 !ruby/object:Gem::Requirement
84
95
  none: false
85
96
  requirements:
86
97
  - - ! '>='
@@ -88,10 +99,21 @@ dependencies:
88
99
  version: '0'
89
100
  type: :development
90
101
  prerelease: false
91
- version_requirements: *23666040
102
+ version_requirements: *19791860
92
103
  - !ruby/object:Gem::Dependency
93
104
  name: sqlite3
94
- requirement: &23663020 !ruby/object:Gem::Requirement
105
+ requirement: &19791040 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: *19791040
114
+ - !ruby/object:Gem::Dependency
115
+ name: json
116
+ requirement: &19790320 !ruby/object:Gem::Requirement
95
117
  none: false
96
118
  requirements:
97
119
  - - ! '>='
@@ -99,7 +121,7 @@ dependencies:
99
121
  version: '0'
100
122
  type: :development
101
123
  prerelease: false
102
- version_requirements: *23663020
124
+ version_requirements: *19790320
103
125
  description: Which supports a lot of undocumented stuff.
104
126
  email: k@spernj.org
105
127
  executables:
@@ -131,15 +153,20 @@ files:
131
153
  - lib/include/class_httpresp.rb
132
154
  - lib/include/class_httpserver.rb
133
155
  - lib/include/class_httpsession.rb
156
+ - lib/include/class_httpsession_contentgroup.rb
134
157
  - lib/include/class_httpsession_knjengine.rb
135
158
  - lib/include/class_httpsession_mongrel.rb
136
159
  - lib/include/class_httpsession_webrick.rb
137
160
  - lib/include/class_knjappserver.rb
138
161
  - lib/include/class_knjappserver_cleaner.rb
162
+ - lib/include/class_knjappserver_cmdline.rb
139
163
  - lib/include/class_knjappserver_errors.rb
140
164
  - lib/include/class_knjappserver_logging.rb
141
165
  - lib/include/class_knjappserver_mailing.rb
166
+ - lib/include/class_knjappserver_sessions.rb
142
167
  - lib/include/class_knjappserver_threadding.rb
168
+ - lib/include/class_knjappserver_threadding_timeout.rb
169
+ - lib/include/class_knjappserver_translations.rb
143
170
  - lib/include/class_knjappserver_web.rb
144
171
  - lib/include/class_log.rb
145
172
  - lib/include/class_log_access.rb
@@ -151,9 +178,16 @@ files:
151
178
  - lib/include/gettext_funcs.rb
152
179
  - lib/include/magic_methods.rb
153
180
  - lib/knjappserver.rb
181
+ - lib/pages/benchmark.rhtml
182
+ - lib/pages/benchmark_print.rhtml
183
+ - lib/pages/benchmark_simple.rhtml
184
+ - lib/pages/benchmark_threadded_content.rhtml
154
185
  - lib/pages/logs_latest.rhtml
155
186
  - lib/pages/logs_show.rhtml
156
187
  - lib/pages/spec.rhtml
188
+ - lib/pages/spec_test_multiple_clients.rhtml
189
+ - lib/pages/spec_threadded_content.rhtml
190
+ - lib/scripts/benchmark.rb
157
191
  - spec/knjappserver_spec.rb
158
192
  - spec/spec_helper.rb
159
193
  has_rdoc: true
@@ -172,7 +206,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
206
  version: '0'
173
207
  segments:
174
208
  - 0
175
- hash: 3257264914756915764
209
+ hash: -4377496633346000305
176
210
  required_rubygems_version: !ruby/object:Gem::Requirement
177
211
  none: false
178
212
  requirements: