knjappserver 0.0.15 → 0.0.16

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.
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: