Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: impl/memory/taskqueue_test.go

Issue 1259593005: Add 'user friendly' datastore API. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: 100% coverage of new code Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package memory 5 package memory
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "math/rand" 9 "math/rand"
10 "net/http" 10 "net/http"
11 "testing" 11 "testing"
12 "time" 12 "time"
13 13
14 » rdsS "github.com/luci/gae/service/rawdatastore" 14 » dsS "github.com/luci/gae/service/datastore"
15 tqS "github.com/luci/gae/service/taskqueue" 15 tqS "github.com/luci/gae/service/taskqueue"
16 "github.com/luci/luci-go/common/clock" 16 "github.com/luci/luci-go/common/clock"
17 "github.com/luci/luci-go/common/clock/testclock" 17 "github.com/luci/luci-go/common/clock/testclock"
18 "github.com/luci/luci-go/common/mathrand" 18 "github.com/luci/luci-go/common/mathrand"
19 . "github.com/smartystreets/goconvey/convey" 19 . "github.com/smartystreets/goconvey/convey"
20 "golang.org/x/net/context" 20 "golang.org/x/net/context"
21 ) 21 )
22 22
23 func TestTaskQueue(t *testing.T) { 23 func TestTaskQueue(t *testing.T) {
24 t.Parallel() 24 t.Parallel()
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 So(err, ShouldBeNil) 223 So(err, ShouldBeNil)
224 224
225 t2 := &tqS.Task{Path: "/hi/city"} 225 t2 := &tqS.Task{Path: "/hi/city"}
226 tEnQ2, err := tq.Add(t2, "") 226 tEnQ2, err := tq.Add(t2, "")
227 So(err, ShouldBeNil) 227 So(err, ShouldBeNil)
228 228
229 err = tq.Delete(tEnQ2, "") 229 err = tq.Delete(tEnQ2, "")
230 So(err, ShouldBeNil) 230 So(err, ShouldBeNil)
231 231
232 Convey("can view regular tasks", func() { 232 Convey("can view regular tasks", func() {
233 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 233 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
234 tq := tqS.Get(c).(interface { 234 tq := tqS.Get(c).(interface {
235 tqS.Testable 235 tqS.Testable
236 tqS.Interface 236 tqS.Interface
237 }) 237 })
238 238
239 So(tq.GetScheduledTasks()["default"][tEn Q.Name], ShouldResemble, tEnQ) 239 So(tq.GetScheduledTasks()["default"][tEn Q.Name], ShouldResemble, tEnQ)
240 So(tq.GetTombstonedTasks()["default"][tE nQ2.Name], ShouldResemble, tEnQ2) 240 So(tq.GetTombstonedTasks()["default"][tE nQ2.Name], ShouldResemble, tEnQ2)
241 So(tq.GetTransactionTasks()["default"], ShouldBeNil) 241 So(tq.GetTransactionTasks()["default"], ShouldBeNil)
242 return nil 242 return nil
243 }, nil) 243 }, nil)
244 }) 244 })
245 245
246 Convey("can add a new task", func() { 246 Convey("can add a new task", func() {
247 tEnQ3 := (*tqS.Task)(nil) 247 tEnQ3 := (*tqS.Task)(nil)
248 248
249 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 249 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
250 tq := tqS.Get(c).(interface { 250 tq := tqS.Get(c).(interface {
251 tqS.Testable 251 tqS.Testable
252 tqS.Interface 252 tqS.Interface
253 }) 253 })
254 254
255 t3 := &tqS.Task{Path: "/sandwitch/victor y"} 255 t3 := &tqS.Task{Path: "/sandwitch/victor y"}
256 tEnQ3, err = tq.Add(t3, "") 256 tEnQ3, err = tq.Add(t3, "")
257 So(err, ShouldBeNil) 257 So(err, ShouldBeNil)
258 258
259 So(tq.GetScheduledTasks()["default"][tEn Q.Name], ShouldResemble, tEnQ) 259 So(tq.GetScheduledTasks()["default"][tEn Q.Name], ShouldResemble, tEnQ)
(...skipping 18 matching lines...) Expand all
278 }) 278 })
279 279
280 Convey("can a new task (but reset the state in a test)", func() { 280 Convey("can a new task (but reset the state in a test)", func() {
281 tEnQ3 := (*tqS.Task)(nil) 281 tEnQ3 := (*tqS.Task)(nil)
282 282
283 ttq := interface { 283 ttq := interface {
284 tqS.Testable 284 tqS.Testable
285 tqS.Interface 285 tqS.Interface
286 }(nil) 286 }(nil)
287 287
288 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 288 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
289 ttq = tqS.Get(c).(interface { 289 ttq = tqS.Get(c).(interface {
290 tqS.Testable 290 tqS.Testable
291 tqS.Interface 291 tqS.Interface
292 }) 292 })
293 293
294 t3 := &tqS.Task{Path: "/sandwitch/victor y"} 294 t3 := &tqS.Task{Path: "/sandwitch/victor y"}
295 tEnQ3, err = ttq.Add(t3, "") 295 tEnQ3, err = ttq.Add(t3, "")
296 So(err, ShouldBeNil) 296 So(err, ShouldBeNil)
297 297
298 So(ttq.GetScheduledTasks()["default"][tE nQ.Name], ShouldResemble, tEnQ) 298 So(ttq.GetScheduledTasks()["default"][tE nQ.Name], ShouldResemble, tEnQ)
(...skipping 13 matching lines...) Expand all
312 So(len(tq.GetTombstonedTasks()["default"]), Shou ldEqual, 0) 312 So(len(tq.GetTombstonedTasks()["default"]), Shou ldEqual, 0)
313 So(len(tq.GetTransactionTasks()["default"]), Sho uldEqual, 0) 313 So(len(tq.GetTransactionTasks()["default"]), Sho uldEqual, 0)
314 314
315 Convey("and reusing a closed context is bad time s", func() { 315 Convey("and reusing a closed context is bad time s", func() {
316 _, err := ttq.Add(nil, "") 316 _, err := ttq.Add(nil, "")
317 So(err.Error(), ShouldContainSubstring, "expired") 317 So(err.Error(), ShouldContainSubstring, "expired")
318 }) 318 })
319 }) 319 })
320 320
321 Convey("you can AddMulti as well", func() { 321 Convey("you can AddMulti as well", func() {
322 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 322 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
323 tq := tqS.Get(c).(interface { 323 tq := tqS.Get(c).(interface {
324 tqS.Testable 324 tqS.Testable
325 tqS.Interface 325 tqS.Interface
326 }) 326 })
327 _, err := tq.AddMulti([]*tqS.Task{t, t, t}, "") 327 _, err := tq.AddMulti([]*tqS.Task{t, t, t}, "")
328 So(err, ShouldBeNil) 328 So(err, ShouldBeNil)
329 So(len(tq.GetScheduledTasks()["default"] ), ShouldEqual, 1) 329 So(len(tq.GetScheduledTasks()["default"] ), ShouldEqual, 1)
330 So(len(tq.GetTransactionTasks()["default "]), ShouldEqual, 3) 330 So(len(tq.GetTransactionTasks()["default "]), ShouldEqual, 3)
331 return nil 331 return nil
332 }, nil) 332 }, nil)
333 So(len(tq.GetScheduledTasks()["default"]), Shoul dEqual, 4) 333 So(len(tq.GetScheduledTasks()["default"]), Shoul dEqual, 4)
334 So(len(tq.GetTransactionTasks()["default"]), Sho uldEqual, 0) 334 So(len(tq.GetTransactionTasks()["default"]), Sho uldEqual, 0)
335 }) 335 })
336 336
337 Convey("unless you add too many things", func() { 337 Convey("unless you add too many things", func() {
338 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 338 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
339 for i := 0; i < 5; i++ { 339 for i := 0; i < 5; i++ {
340 _, err = tqS.Get(c).Add(t, "") 340 _, err = tqS.Get(c).Add(t, "")
341 So(err, ShouldBeNil) 341 So(err, ShouldBeNil)
342 } 342 }
343 _, err = tqS.Get(c).Add(t, "") 343 _, err = tqS.Get(c).Add(t, "")
344 So(err.Error(), ShouldContainSubstring, "BAD_REQUEST") 344 So(err.Error(), ShouldContainSubstring, "BAD_REQUEST")
345 return nil 345 return nil
346 }, nil) 346 }, nil)
347 }) 347 })
348 348
349 Convey("unless you Add to a bad queue", func() { 349 Convey("unless you Add to a bad queue", func() {
350 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 350 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
351 _, err = tqS.Get(c).Add(t, "meat") 351 _, err = tqS.Get(c).Add(t, "meat")
352 So(err.Error(), ShouldContainSubstring, "UNKNOWN_QUEUE") 352 So(err.Error(), ShouldContainSubstring, "UNKNOWN_QUEUE")
353 353
354 Convey("unless you add it!", func() { 354 Convey("unless you add it!", func() {
355 tqS.Get(c).(tqS.Testable).Create Queue("meat") 355 tqS.Get(c).(tqS.Testable).Create Queue("meat")
356 _, err = tqS.Get(c).Add(t, "meat ") 356 _, err = tqS.Get(c).Add(t, "meat ")
357 So(err, ShouldBeNil) 357 So(err, ShouldBeNil)
358 }) 358 })
359 359
360 return nil 360 return nil
361 }, nil) 361 }, nil)
362 }) 362 })
363 363
364 Convey("No other features are available, however", func( ) { 364 Convey("No other features are available, however", func( ) {
365 err := error(nil) 365 err := error(nil)
366 func() { 366 func() {
367 defer func() { err = recover().(error) } () 367 defer func() { err = recover().(error) } ()
368 » » » » » rdsS.Get(c).RunInTransaction(func(c cont ext.Context) error { 368 » » » » » dsS.Get(c).RunInTransaction(func(c conte xt.Context) error {
369 tqS.Get(c).Delete(t, "") 369 tqS.Get(c).Delete(t, "")
370 return nil 370 return nil
371 }, nil) 371 }, nil)
372 }() 372 }()
373 So(err.Error(), ShouldContainSubstring, "TaskQue ue.Delete") 373 So(err.Error(), ShouldContainSubstring, "TaskQue ue.Delete")
374 }) 374 })
375 375
376 Convey("adding a new task only happens if we don't errou t", func() { 376 Convey("adding a new task only happens if we don't errou t", func() {
377 » » » » rdsS.Get(c).RunInTransaction(func(c context.Cont ext) error { 377 » » » » dsS.Get(c).RunInTransaction(func(c context.Conte xt) error {
378 t3 := &tqS.Task{Path: "/sandwitch/victor y"} 378 t3 := &tqS.Task{Path: "/sandwitch/victor y"}
379 _, err = tqS.Get(c).Add(t3, "") 379 _, err = tqS.Get(c).Add(t3, "")
380 So(err, ShouldBeNil) 380 So(err, ShouldBeNil)
381 return fmt.Errorf("nooooo") 381 return fmt.Errorf("nooooo")
382 }, nil) 382 }, nil)
383 383
384 So(tq.GetScheduledTasks()["default"][tEnQ.Name], ShouldResemble, tEnQ) 384 So(tq.GetScheduledTasks()["default"][tEnQ.Name], ShouldResemble, tEnQ)
385 So(tq.GetTombstonedTasks()["default"][tEnQ2.Name ], ShouldResemble, tEnQ2) 385 So(tq.GetTombstonedTasks()["default"][tEnQ2.Name ], ShouldResemble, tEnQ2)
386 So(tq.GetTransactionTasks()["default"], ShouldBe Nil) 386 So(tq.GetTransactionTasks()["default"], ShouldBe Nil)
387 }) 387 })
388 388
389 Convey("likewise, a panic doesn't schedule anything", fu nc() { 389 Convey("likewise, a panic doesn't schedule anything", fu nc() {
390 func() { 390 func() {
391 defer func() { recover() }() 391 defer func() { recover() }()
392 » » » » » rdsS.Get(c).RunInTransaction(func(c cont ext.Context) error { 392 » » » » » dsS.Get(c).RunInTransaction(func(c conte xt.Context) error {
393 tq := tqS.Get(c).(interface { 393 tq := tqS.Get(c).(interface {
394 tqS.Testable 394 tqS.Testable
395 tqS.Interface 395 tqS.Interface
396 }) 396 })
397 397
398 t3 := &tqS.Task{Path: "/sandwitc h/victory"} 398 t3 := &tqS.Task{Path: "/sandwitc h/victory"}
399 _, err = tq.Add(t3, "") 399 _, err = tq.Add(t3, "")
400 So(err, ShouldBeNil) 400 So(err, ShouldBeNil)
401 401
402 panic(fmt.Errorf("nooooo")) 402 panic(fmt.Errorf("nooooo"))
403 }, nil) 403 }, nil)
404 }() 404 }()
405 405
406 So(tq.GetScheduledTasks()["default"][tEnQ.Name], ShouldResemble, tEnQ) 406 So(tq.GetScheduledTasks()["default"][tEnQ.Name], ShouldResemble, tEnQ)
407 So(tq.GetTombstonedTasks()["default"][tEnQ2.Name ], ShouldResemble, tEnQ2) 407 So(tq.GetTombstonedTasks()["default"][tEnQ2.Name ], ShouldResemble, tEnQ2)
408 So(tq.GetTransactionTasks()["default"], ShouldBe Nil) 408 So(tq.GetTransactionTasks()["default"], ShouldBe Nil)
409 }) 409 })
410 410
411 }) 411 })
412 }) 412 })
413 } 413 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698