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