|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- // Copyright 2011 Xing Xing <mikespook@gmail.com> All rights reserved.
- // Use of this source code is governed by a MIT
- // license that can be found in the LICENSE file.
-
- /*
- This module is Gearman API for golang.
- The protocol was implemented by native way.
- */
-
- package gearman
-
- import (
- "github.com/mikespook/gearman-go/client"
- "github.com/mikespook/gearman-go/worker"
- "strings"
- "sync"
- "testing"
- "time"
- )
-
- const (
- STR = "The gearman-go is a pure go implemented library."
- GEARMAND = "127.0.0.1:4730"
- )
-
- func ToUpper(job worker.Job) ([]byte, error) {
- data := job.Data()
- data = []byte(strings.ToUpper(string(data)))
- return data, nil
- }
-
- func Sleep(job worker.Job) ([]byte, error) {
- time.Sleep(time.Second * 5)
- return nil, nil
- }
-
- func TestJobs(t *testing.T) {
- w := worker.New(worker.Unlimited)
- if err := w.AddServer("tcp4", GEARMAND); err != nil {
- t.Error(err)
- return
- }
- defer w.Close()
- t.Log("Servers added...")
- if err := w.AddFunc("ToUpper", ToUpper, 0); err != nil {
- t.Error(err)
- return
- }
- if err := w.AddFunc("Sleep", Sleep, 0); err != nil {
- t.Error(err)
- return
- }
- t.Log("Functions added...")
- w.ErrorHandler = func(e error) {
- t.Error(e)
- }
- go w.Work()
- t.Log("Worker is running...")
-
- c, err := client.New("tcp4", GEARMAND)
- if err != nil {
- t.Error(err)
- return
- }
- defer c.Close()
-
- c.ErrorHandler = func(e error) {
- t.Log(e)
- }
-
- {
- var w sync.WaitGroup
- jobHandler := func(job *client.Response) {
- upper := strings.ToUpper(STR)
- if string(job.Data) != upper {
- t.Errorf("%s expected, got %s", upper, job.Data)
- }
- w.Done()
- }
-
- w.Add(1)
- handle, err := c.Do("ToUpper", []byte(STR), client.JOB_NORMAL, jobHandler)
- if err != nil {
- t.Error(err)
- return
- }
- w.Wait()
- status, err := c.Status(handle)
- if err != nil {
- t.Error(err)
- return
- }
- if status.Known {
- t.Errorf("%s shouldn't be known", status.Handle)
- return
- }
-
- if status.Running {
- t.Errorf("%s shouldn't be running", status.Handle)
- }
- }
- {
- handle, err := c.DoBg("Sleep", nil, client.JOB_NORMAL)
- if err != nil {
- t.Error(err)
- return
- }
- time.Sleep(time.Second)
- status, err := c.Status(handle)
- if err != nil {
- t.Error(err)
- return
- }
-
- if !status.Known {
- t.Errorf("%s should be known", status.Handle)
- return
- }
-
- if !status.Running {
- t.Errorf("%s should be running", status.Handle)
- }
- }
- {
- status, err := c.Status("not exists handle")
- if err != nil {
- t.Error(err)
- return
- }
-
- if status.Known {
- t.Errorf("%s shouldn't be known", status.Handle)
- return
- }
-
- if status.Running {
- t.Errorf("%s shouldn't be running", status.Handle)
- }
- }
- }
|