summaryrefslogtreecommitdiff
path: root/ext/session/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ext/session/tests')
-rw-r--r--ext/session/tests/session_abort_basic.phpt51
-rw-r--r--ext/session/tests/session_gc_basic.phpt56
-rw-r--r--ext/session/tests/session_hash_function_basic.phpt52
-rw-r--r--ext/session/tests/session_reset_basic.phpt49
-rw-r--r--ext/session/tests/session_serializer_name_basic.phpt37
-rw-r--r--ext/session/tests/session_set_save_handler_basic.phpt3
-rw-r--r--ext/session/tests/session_set_save_handler_class_003.phpt5
-rw-r--r--ext/session/tests/session_set_save_handler_class_007.phpt3
-rw-r--r--ext/session/tests/session_set_save_handler_closures.phpt7
-rw-r--r--ext/session/tests/session_set_save_handler_write_short_circuit.phpt104
10 files changed, 362 insertions, 5 deletions
diff --git a/ext/session/tests/session_abort_basic.phpt b/ext/session/tests/session_abort_basic.phpt
new file mode 100644
index 0000000000..4a6702f0dc
--- /dev/null
+++ b/ext/session/tests/session_abort_basic.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Test session_abort() function : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session.save_path=
+session.name=PHPSESSID
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : void session_abort(void)
+ * Description : Should abort session. Session data should not be written.
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_abort() : basic functionality ***\n";
+
+session_start();
+$session_id = session_id();
+$_SESSION['foo'] = 123;
+session_commit();
+
+session_id($session_id);
+session_start();
+$_SESSION['bar'] = 456;
+var_dump($_SESSION);
+session_abort();
+
+session_id($session_id);
+session_start();
+var_dump($_SESSION); // Should only have 'foo'
+
+echo "Done".PHP_EOL;
+
+?>
+--EXPECTF--
+*** Testing session_abort() : basic functionality ***
+array(2) {
+ ["foo"]=>
+ int(123)
+ ["bar"]=>
+ int(456)
+}
+array(1) {
+ ["foo"]=>
+ int(123)
+}
+Done
diff --git a/ext/session/tests/session_gc_basic.phpt b/ext/session/tests/session_gc_basic.phpt
new file mode 100644
index 0000000000..f0726ce93b
--- /dev/null
+++ b/ext/session/tests/session_gc_basic.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test session_gc() function : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session.serialize_handler=php
+session.save_handler=files
+session.maxlifetime=782000
+--FILE--
+<?php
+error_reporting(E_ALL);
+
+ob_start();
+
+/*
+ * Prototype : int session_gc([int maxlifetime])
+ * Description : Execute gc and return number of deleted data
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_gc() : basic functionality ***\n";
+
+// Should fail. It requires active session.
+var_dump(session_gc());
+
+session_start();
+// Should succeed with some number
+var_dump(session_gc());
+// Secound time must be int(0)
+var_dump(session_gc());
+session_write_close();
+
+// Start&stop session to generate
+session_start();
+session_write_close();
+session_start();
+session_write_close();
+session_start();
+session_write_close();
+
+session_start();
+$ndeleted = session_gc(0); // Delete all
+var_dump($ndeleted >= 3);
+
+echo "Done".PHP_EOL;
+
+?>
+--EXPECTF--
+*** Testing session_gc() : basic functionality ***
+
+Warning: session_gc(): Trying to garbage collect without active session in %s on line 15
+bool(false)
+int(%d)
+int(0)
+bool(true)
+Done
diff --git a/ext/session/tests/session_hash_function_basic.phpt b/ext/session/tests/session_hash_function_basic.phpt
new file mode 100644
index 0000000000..663852d9d1
--- /dev/null
+++ b/ext/session/tests/session_hash_function_basic.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Test session.hash_function ini setting : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session.hash_bits_per_character=4
+--FILE--
+<?php
+
+ob_start();
+
+echo "*** Testing session.hash_function : basic functionality ***\n";
+
+var_dump(ini_set('session.hash_function', 'md5'));
+var_dump(session_start());
+var_dump(!empty(session_id()), session_id());
+var_dump(session_destroy());
+
+var_dump(ini_set('session.hash_function', 'sha1'));
+var_dump(session_start());
+var_dump(!empty(session_id()), session_id());
+var_dump(session_destroy());
+
+var_dump(ini_set('session.hash_function', 'none')); // Should fail
+var_dump(session_start());
+var_dump(!empty(session_id()), session_id());
+var_dump(session_destroy());
+
+
+echo "Done";
+ob_end_flush();
+?>
+--EXPECTF--
+*** Testing session.hash_function : basic functionality ***
+string(1) "0"
+bool(true)
+bool(true)
+string(32) "%s"
+bool(true)
+string(3) "md5"
+bool(true)
+bool(true)
+string(40) "%s"
+bool(true)
+
+Warning: ini_set(): session.configuration 'session.hash_function' must be existing hash function. none does not exist. in %s/session_hash_function_basic.php on line 17
+bool(false)
+bool(true)
+bool(true)
+string(40) "%s"
+bool(true)
+Done
diff --git a/ext/session/tests/session_reset_basic.phpt b/ext/session/tests/session_reset_basic.phpt
new file mode 100644
index 0000000000..75c6a04119
--- /dev/null
+++ b/ext/session/tests/session_reset_basic.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Test session_reset() function : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--INI--
+session.save_path=
+session.name=PHPSESSID
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : void session_reset(void)
+ * Description : Should abort session. Session data should not be written.
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_abort() : basic functionality ***\n";
+
+session_start();
+$session_id = session_id();
+$_SESSION['foo'] = 123;
+session_commit();
+
+session_id($session_id);
+session_start();
+$_SESSION['bar'] = 456;
+var_dump($_SESSION);
+session_reset();
+
+var_dump($_SESSION); // Should only have 'foo'
+
+echo "Done".PHP_EOL;
+
+?>
+--EXPECTF--
+*** Testing session_abort() : basic functionality ***
+array(2) {
+ ["foo"]=>
+ int(123)
+ ["bar"]=>
+ int(456)
+}
+array(1) {
+ ["foo"]=>
+ int(123)
+}
+Done
diff --git a/ext/session/tests/session_serializer_name_basic.phpt b/ext/session/tests/session_serializer_name_basic.phpt
new file mode 100644
index 0000000000..ca292dd36f
--- /dev/null
+++ b/ext/session/tests/session_serializer_name_basic.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test session_serializer_name() function : basic functionality
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : mixed session_serializer_name([string name])
+ * Description : Change/get serialize handler name
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_serializer_name() : basic functionality ***\n";
+
+var_dump(session_serializer_name());
+var_dump(session_serializer_name('php'));
+var_dump(session_serializer_name('php_binary'));
+var_dump(session_serializer_name('none'));
+var_dump(session_serializer_name());
+
+echo "Done";
+ob_end_flush();
+?>
+--EXPECTF--
+*** Testing session_serializer_name() : basic functionality ***
+string(3) "php"
+bool(true)
+bool(true)
+
+Warning: session_serializer_name(): Cannot find serialization handler 'none' in %s/session_serializer_name_basic.php on line 16
+bool(false)
+string(10) "php_binary"
+Done
+
diff --git a/ext/session/tests/session_set_save_handler_basic.phpt b/ext/session/tests/session_set_save_handler_basic.phpt
index 3897ba9a92..e8496e8afb 100644
--- a/ext/session/tests/session_set_save_handler_basic.phpt
+++ b/ext/session/tests/session_set_save_handler_basic.phpt
@@ -43,6 +43,7 @@ session_id($session_id);
session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
session_start();
var_dump($_SESSION);
+$_SESSION['Bar'] = 'Foo';
session_write_close();
ob_end_flush();
@@ -91,5 +92,5 @@ array(3) {
["Guff"]=>
int(1234567890)
}
-Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;]
+Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;Bar|s:3:"Foo";]
Close [%s,PHPSESSID]
diff --git a/ext/session/tests/session_set_save_handler_class_003.phpt b/ext/session/tests/session_set_save_handler_class_003.phpt
index e9a3cc2feb..29b3846851 100644
--- a/ext/session/tests/session_set_save_handler_class_003.phpt
+++ b/ext/session/tests/session_set_save_handler_class_003.phpt
@@ -58,6 +58,7 @@ session_set_save_handler($handler);
session_start();
+$_SESSION['bar'] = 'hello';
session_write_close();
session_unset();
@@ -71,8 +72,10 @@ array(1) {
}
int(4)
string(%d) "%s"
-array(1) {
+array(2) {
["foo"]=>
string(5) "hello"
+ ["bar"]=>
+ string(5) "hello"
}
string(3) "hai"
diff --git a/ext/session/tests/session_set_save_handler_class_007.phpt b/ext/session/tests/session_set_save_handler_class_007.phpt
index 7344ae1ef3..55f722515e 100644
--- a/ext/session/tests/session_set_save_handler_class_007.phpt
+++ b/ext/session/tests/session_set_save_handler_class_007.phpt
@@ -56,6 +56,7 @@ $handler = new MySession(2);
session_set_save_handler($handler);
session_start();
+$_SESSION['abc'] = 'xyz';
// implicit close (called by shutdown function)
echo "done\n";
ob_end_flush();
@@ -69,6 +70,6 @@ ob_end_flush();
(#2) constructor called
(#1) destructor called
done
-(#2) writing %s = foo|s:3:"bar";
+(#2) writing %s = foo|s:3:"bar";abc|s:3:"xyz";
(#2) closing %s
(#2) destructor called
diff --git a/ext/session/tests/session_set_save_handler_closures.phpt b/ext/session/tests/session_set_save_handler_closures.phpt
index 21b2c68737..1251886b01 100644
--- a/ext/session/tests/session_set_save_handler_closures.phpt
+++ b/ext/session/tests/session_set_save_handler_closures.phpt
@@ -42,6 +42,7 @@ echo "Starting session again..!\n";
session_id($session_id);
session_set_save_handler($open_closure, $close_closure, $read_closure, $write_closure, $destroy_closure, $gc_closure);
session_start();
+$_SESSION['Bar'] = 'Foo';
var_dump($_SESSION);
session_write_close();
@@ -83,13 +84,15 @@ array(3) {
Starting session again..!
Open [%s,PHPSESSID]
Read [%s,%s]
-array(3) {
+array(4) {
["Blah"]=>
string(12) "Hello World!"
["Foo"]=>
bool(false)
["Guff"]=>
int(1234567890)
+ ["Bar"]=>
+ string(3) "Foo"
}
-Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;]
+Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;Bar|s:3:"Foo";]
Close [%s,PHPSESSID]
diff --git a/ext/session/tests/session_set_save_handler_write_short_circuit.phpt b/ext/session/tests/session_set_save_handler_write_short_circuit.phpt
new file mode 100644
index 0000000000..02ca182ec6
--- /dev/null
+++ b/ext/session/tests/session_set_save_handler_write_short_circuit.phpt
@@ -0,0 +1,104 @@
+--TEST--
+Test session_set_save_handler() function : test write short circuit
+--INI--
+session.save_path=
+session.name=PHPSESSID
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--FILE--
+<?php
+
+ob_start();
+
+/*
+ * Prototype : bool session_set_save_handler(callback $open, callback $close, callback $read, callback $write, callback $destroy, callback $gc)
+ * Description : Sets user-level session storage functions
+ * Source code : ext/session/session.c
+ */
+
+echo "*** Testing session_set_save_handler() : test write short circuit ***\n";
+
+require_once "save_handler.inc";
+$path = dirname(__FILE__);
+session_save_path($path);
+session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
+
+session_start();
+$session_id = session_id();
+$_SESSION["Blah"] = "Hello World!";
+$_SESSION["Foo"] = FALSE;
+$_SESSION["Guff"] = 1234567890;
+var_dump($_SESSION);
+
+session_write_close();
+session_unset();
+var_dump($_SESSION);
+
+echo "Starting session again..!\n";
+session_id($session_id);
+session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
+session_start();
+var_dump($_SESSION);
+$_SESSION['Bar'] = 'Foo';
+session_write_close();
+
+echo "Starting session again..!\n";
+session_id($session_id);
+session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
+session_start();
+var_dump($_SESSION);
+// $_SESSION should be the same and should skip write()
+session_write_close();
+
+ob_end_flush();
+?>
+--EXPECTF--
+*** Testing session_set_save_handler() : test write short circuit ***
+
+Open [%s,PHPSESSID]
+Read [%s,%s]
+array(3) {
+ ["Blah"]=>
+ string(12) "Hello World!"
+ ["Foo"]=>
+ bool(false)
+ ["Guff"]=>
+ int(1234567890)
+}
+Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;]
+Close [%s,PHPSESSID]
+array(3) {
+ ["Blah"]=>
+ string(12) "Hello World!"
+ ["Foo"]=>
+ bool(false)
+ ["Guff"]=>
+ int(1234567890)
+}
+Starting session again..!
+Open [%s,PHPSESSID]
+Read [%s,%s]
+array(3) {
+ ["Blah"]=>
+ string(12) "Hello World!"
+ ["Foo"]=>
+ bool(false)
+ ["Guff"]=>
+ int(1234567890)
+}
+Write [%s,%s,Blah|s:12:"Hello World!";Foo|b:0;Guff|i:1234567890;Bar|s:3:"Foo";]
+Close [%s,PHPSESSID]
+Starting session again..!
+Open [%s,PHPSESSID]
+Read [%s,%s]
+array(4) {
+ ["Blah"]=>
+ string(12) "Hello World!"
+ ["Foo"]=>
+ bool(false)
+ ["Guff"]=>
+ int(1234567890)
+ ["Bar"]=>
+ string(3) "Foo"
+}
+Close [%s,PHPSESSID] \ No newline at end of file