github.com/woremacx/kocha@v0.7.1-0.20150731103243-a5889322afc9/session_test.go (about)

     1  package kocha_test
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  	"strings"
     7  	"testing"
     8  	"testing/quick"
     9  
    10  	"github.com/woremacx/kocha"
    11  )
    12  
    13  func TestSession(t *testing.T) {
    14  	sess := make(kocha.Session)
    15  	key := "test_key"
    16  	var actual interface{} = sess.Get(key)
    17  	var expected interface{} = ""
    18  	if !reflect.DeepEqual(actual, expected) {
    19  		t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected)
    20  	}
    21  	actual = len(sess)
    22  	expected = 0
    23  	if !reflect.DeepEqual(actual, expected) {
    24  		t.Errorf(`len(Session) => %#v; want %#v`, actual, expected)
    25  	}
    26  
    27  	value := "test_value"
    28  	sess.Set(key, value)
    29  	actual = sess.Get(key)
    30  	expected = value
    31  	if !reflect.DeepEqual(actual, expected) {
    32  		t.Errorf(`Session.Set(%#v, %#v); Session.Get(%#v) => %#v; want %#v`, key, value, key, actual, expected)
    33  	}
    34  	actual = len(sess)
    35  	expected = 1
    36  	if !reflect.DeepEqual(actual, expected) {
    37  		t.Errorf(`Session.Set(%#v, %#v); len(Session) => %#v; want %#v`, key, value, actual, expected)
    38  	}
    39  
    40  	key2 := "test_key2"
    41  	value2 := "test_value2"
    42  	sess.Set(key2, value2)
    43  	actual = sess.Get(key2)
    44  	expected = value2
    45  	if !reflect.DeepEqual(actual, expected) {
    46  		t.Errorf(`Session.Set(%#v, %#v); Session.Get(%#v) => %#v; want %#v`, key2, value2, key2, actual, expected)
    47  	}
    48  	actual = len(sess)
    49  	expected = 2
    50  	if !reflect.DeepEqual(actual, expected) {
    51  		t.Errorf(`Session.Set(%#v, %#v); len(Session) => %#v; want %#v`, key2, value2, actual, expected)
    52  	}
    53  
    54  	value3 := "test_value3"
    55  	sess.Set(key, value3)
    56  	actual = sess.Get(key)
    57  	expected = value3
    58  	if !reflect.DeepEqual(actual, expected) {
    59  		t.Errorf(`Session.Set(%#v, %#v); Session.Get(%#v) => %#v; want %#v`, key, value3, key, actual, expected)
    60  	}
    61  	actual = len(sess)
    62  	expected = 2
    63  	if !reflect.DeepEqual(actual, expected) {
    64  		t.Errorf(`Session.Set(%#v, %#v); len(Session) => %#v; want %#v`, key, value3, actual, expected)
    65  	}
    66  
    67  	sess.Clear()
    68  	for _, key := range []string{key, key2} {
    69  		actual = sess.Get(key)
    70  		expected = ""
    71  		if !reflect.DeepEqual(actual, expected) {
    72  			t.Errorf(`Session.Clear(); Session.Get(%#v) => %#v; want %#v`, key, actual, expected)
    73  		}
    74  	}
    75  	actual = len(sess)
    76  	expected = 0
    77  	if !reflect.DeepEqual(actual, expected) {
    78  		t.Errorf(`Session.Clear(); len(Session) => %#v; want %#v`, actual, expected)
    79  	}
    80  }
    81  
    82  func TestSession_Get(t *testing.T) {
    83  	sess := make(kocha.Session)
    84  	key := "test_key"
    85  	var actual interface{} = sess.Get(key)
    86  	var expected interface{} = ""
    87  	if !reflect.DeepEqual(actual, expected) {
    88  		t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected)
    89  	}
    90  
    91  	value := "test_value"
    92  	sess[key] = value
    93  	actual = sess.Get(key)
    94  	expected = value
    95  	if !reflect.DeepEqual(actual, expected) {
    96  		t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected)
    97  	}
    98  
    99  	delete(sess, key)
   100  	actual = sess.Get(key)
   101  	expected = ""
   102  	if !reflect.DeepEqual(actual, expected) {
   103  		t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected)
   104  	}
   105  }
   106  
   107  func TestSession_Set(t *testing.T) {
   108  	sess := make(kocha.Session)
   109  	key := "test_key"
   110  	var actual interface{} = sess[key]
   111  	var expected interface{} = ""
   112  	if !reflect.DeepEqual(actual, expected) {
   113  		t.Errorf(`Session[%#v] => %#v; want %#v`, key, actual, expected)
   114  	}
   115  
   116  	value := "test_value"
   117  	sess.Set(key, value)
   118  	actual = sess[key]
   119  	expected = value
   120  	if !reflect.DeepEqual(actual, expected) {
   121  		t.Errorf(`Session.Set(%#v, %#v); Session[%#v] => %#v; want %#v`, key, value, key, actual, expected)
   122  	}
   123  
   124  	value2 := "test_value2"
   125  	sess.Set(key, value2)
   126  	actual = sess[key]
   127  	expected = value2
   128  	if !reflect.DeepEqual(actual, expected) {
   129  		t.Errorf(`Session.Set(%#v, %#v); Session[%#v] => %#v; want %#v`, key, value2, key, actual, expected)
   130  	}
   131  }
   132  
   133  func TestSession_Del(t *testing.T) {
   134  	sess := make(kocha.Session)
   135  	key := "test_key"
   136  	value := "test_value"
   137  	sess[key] = value
   138  	var actual interface{} = sess[key]
   139  	var expected interface{} = value
   140  	if !reflect.DeepEqual(actual, expected) {
   141  		t.Errorf(`Session[%#v] => %#v; want %#v`, key, actual, expected)
   142  	}
   143  
   144  	sess.Del(key)
   145  	actual = sess[key]
   146  	expected = ""
   147  	if !reflect.DeepEqual(actual, expected) {
   148  		t.Errorf(`Session.Del(%#v); Session[%#v] => %#v; want %#v`, key, key, actual, expected)
   149  	}
   150  }
   151  
   152  func Test_Session_Clear(t *testing.T) {
   153  	sess := make(kocha.Session)
   154  	sess["hoge"] = "foo"
   155  	sess["bar"] = "baz"
   156  	actual := len(sess)
   157  	expected := 2
   158  	if !reflect.DeepEqual(actual, expected) {
   159  		t.Errorf("Expect %v, but %v", expected, actual)
   160  	}
   161  	sess.Clear()
   162  	actual = len(sess)
   163  	expected = 0
   164  	if !reflect.DeepEqual(actual, expected) {
   165  		t.Errorf("Expect %v, but %v", expected, actual)
   166  	}
   167  }
   168  
   169  func Test_SessionCookieStore(t *testing.T) {
   170  	if err := quick.Check(func(k, v string) bool {
   171  		expected := make(kocha.Session)
   172  		expected[k] = v
   173  		store := kocha.NewTestSessionCookieStore()
   174  		r, err := store.Save(expected)
   175  		if err != nil {
   176  			t.Fatal(err)
   177  		}
   178  		actual, err := store.Load(r)
   179  		if err != nil {
   180  			t.Fatal(err)
   181  		}
   182  		return reflect.DeepEqual(actual, expected)
   183  	}, nil); err != nil {
   184  		t.Error(err)
   185  	}
   186  
   187  	func() {
   188  		store := kocha.NewTestSessionCookieStore()
   189  		key := "invalid"
   190  		_, err := store.Load(key)
   191  		actual := err
   192  		expect := fmt.Errorf("kocha: session cookie value too short")
   193  		if !reflect.DeepEqual(actual, expect) {
   194  			t.Errorf(`SessionCookieStore.Load(%#v) => _, %#v; want %#v`, key, actual, expect)
   195  		}
   196  	}()
   197  }
   198  
   199  func Test_SessionCookieStore_Validate(t *testing.T) {
   200  	// tests for validate the key size.
   201  	for _, keySize := range []int{16, 24, 32} {
   202  		store := &kocha.SessionCookieStore{
   203  			SecretKey:  strings.Repeat("a", keySize),
   204  			SigningKey: "a",
   205  		}
   206  		if err := store.Validate(); err != nil {
   207  			t.Errorf("Expect key size %v is valid, but returned error: %v", keySize, err)
   208  		}
   209  	}
   210  	// boundary tests
   211  	for _, keySize := range []int{15, 17, 23, 25, 31, 33} {
   212  		store := &kocha.SessionCookieStore{
   213  			SecretKey:  strings.Repeat("a", keySize),
   214  			SigningKey: "a",
   215  		}
   216  		if err := store.Validate(); err == nil {
   217  			t.Errorf("Expect key size %v is invalid, but doesn't returned error", keySize)
   218  		}
   219  	}
   220  }