instance_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package aetest
  2. import (
  3. "os"
  4. "testing"
  5. "google.golang.org/appengine"
  6. "google.golang.org/appengine/datastore"
  7. "google.golang.org/appengine/memcache"
  8. "google.golang.org/appengine/user"
  9. )
  10. func TestBasicAPICalls(t *testing.T) {
  11. // Only run the test if APPENGINE_DEV_APPSERVER is explicitly set.
  12. if os.Getenv("APPENGINE_DEV_APPSERVER") == "" {
  13. t.Skip("APPENGINE_DEV_APPSERVER not set")
  14. }
  15. inst, err := NewInstance(nil)
  16. if err != nil {
  17. t.Fatalf("NewInstance: %v", err)
  18. }
  19. defer inst.Close()
  20. req, err := inst.NewRequest("GET", "http://example.com/page", nil)
  21. if err != nil {
  22. t.Fatalf("NewRequest: %v", err)
  23. }
  24. ctx := appengine.NewContext(req)
  25. it := &memcache.Item{
  26. Key: "some-key",
  27. Value: []byte("some-value"),
  28. }
  29. err = memcache.Set(ctx, it)
  30. if err != nil {
  31. t.Fatalf("Set err: %v", err)
  32. }
  33. it, err = memcache.Get(ctx, "some-key")
  34. if err != nil {
  35. t.Fatalf("Get err: %v; want no error", err)
  36. }
  37. if g, w := string(it.Value), "some-value"; g != w {
  38. t.Errorf("retrieved Item.Value = %q, want %q", g, w)
  39. }
  40. type Entity struct{ Value string }
  41. e := &Entity{Value: "foo"}
  42. k := datastore.NewIncompleteKey(ctx, "Entity", nil)
  43. k, err = datastore.Put(ctx, k, e)
  44. if err != nil {
  45. t.Fatalf("datastore.Put: %v", err)
  46. }
  47. e = new(Entity)
  48. if err := datastore.Get(ctx, k, e); err != nil {
  49. t.Fatalf("datastore.Get: %v", err)
  50. }
  51. if g, w := e.Value, "foo"; g != w {
  52. t.Errorf("retrieved Entity.Value = %q, want %q", g, w)
  53. }
  54. }
  55. func TestContext(t *testing.T) {
  56. // Only run the test if APPENGINE_DEV_APPSERVER is explicitly set.
  57. if os.Getenv("APPENGINE_DEV_APPSERVER") == "" {
  58. t.Skip("APPENGINE_DEV_APPSERVER not set")
  59. }
  60. // Check that the context methods work.
  61. _, done, err := NewContext()
  62. if err != nil {
  63. t.Fatalf("NewContext: %v", err)
  64. }
  65. done()
  66. }
  67. func TestUsers(t *testing.T) {
  68. // Only run the test if APPENGINE_DEV_APPSERVER is explicitly set.
  69. if os.Getenv("APPENGINE_DEV_APPSERVER") == "" {
  70. t.Skip("APPENGINE_DEV_APPSERVER not set")
  71. }
  72. inst, err := NewInstance(nil)
  73. if err != nil {
  74. t.Fatalf("NewInstance: %v", err)
  75. }
  76. defer inst.Close()
  77. req, err := inst.NewRequest("GET", "http://example.com/page", nil)
  78. if err != nil {
  79. t.Fatalf("NewRequest: %v", err)
  80. }
  81. ctx := appengine.NewContext(req)
  82. if user := user.Current(ctx); user != nil {
  83. t.Errorf("user.Current initially %v, want nil", user)
  84. }
  85. u := &user.User{
  86. Email: "gopher@example.com",
  87. Admin: true,
  88. }
  89. Login(u, req)
  90. if got := user.Current(ctx); got.Email != u.Email {
  91. t.Errorf("user.Current: %v, want %v", got, u)
  92. }
  93. if admin := user.IsAdmin(ctx); !admin {
  94. t.Errorf("user.IsAdmin: %t, want true", admin)
  95. }
  96. Logout(req)
  97. if user := user.Current(ctx); user != nil {
  98. t.Errorf("user.Current after logout %v, want nil", user)
  99. }
  100. }