Skip to content

Commit

Permalink
Merge pull request micro#686 from milosgajdos83/config-watcher
Browse files Browse the repository at this point in the history
Introduce ErrStoppedWatcher for source.Source Watchers and fixed test
  • Loading branch information
asim committed Aug 21, 2019
2 parents f8e68ae + 4ea2751 commit 0aea8e3
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 19 deletions.
27 changes: 22 additions & 5 deletions config/default_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,16 +145,26 @@ func TestFileChange(t *testing.T) {
if err != nil {
t.Error(err)
}

changeTimes := 0
done := make(chan bool)

go func() {
defer func() {
close(done)
}()

for {
v, err := watcher.Next()
if err != nil {
t.Error(err)
if err.Error() != "watcher stopped" {
t.Error(err)
return
}
return
}
changeTimes++
t.Logf("file change,%s", string(v.Bytes()))
t.Logf("file change,%s: %d", string(v.Bytes()), changeTimes)
}
}()

Expand All @@ -169,10 +179,17 @@ func TestFileChange(t *testing.T) {
t.Error(err)
}

time.Sleep(time.Second)
time.Sleep(500 * time.Millisecond)
}

if changeTimes != 4 {
t.Error(fmt.Errorf("watcher error: change times %d is not enough", changeTimes))
if err := watcher.Stop(); err != nil {
t.Fatalf("failed to stop watcher: %s", err)
}

// wait for the watcher to finish
<-done

if changeTimes != 5 {
t.Errorf("watcher error: change times %d is not enough", changeTimes)
}
}
3 changes: 1 addition & 2 deletions config/source/consul/watcher.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package consul

import (
"errors"
"time"

"github.com/hashicorp/consul/api"
Expand Down Expand Up @@ -80,7 +79,7 @@ func (w *watcher) Next() (*source.ChangeSet, error) {
case cs := <-w.ch:
return cs, nil
case <-w.exit:
return nil, errors.New("watcher stopped")
return nil, source.ErrWatcherStopped
}
}

Expand Down
6 changes: 3 additions & 3 deletions config/source/env/env_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ func TestEnvvar_Prefixes(t *testing.T) {
}

func TestEnvvar_WatchNextNoOpsUntilStop(t *testing.T) {
source := NewSource(WithStrippedPrefix("GOMICRO_"))
w, err := source.Watch()
src := NewSource(WithStrippedPrefix("GOMICRO_"))
w, err := src.Watch()
if err != nil {
t.Error(err)
}
Expand All @@ -97,7 +97,7 @@ func TestEnvvar_WatchNextNoOpsUntilStop(t *testing.T) {
w.Stop()
}()

if _, err := w.Next(); err.Error() != "watcher stopped" {
if _, err := w.Next(); err != source.ErrWatcherStopped {
t.Errorf("expected watcher stopped error, got %v", err)
}
}
Expand Down
4 changes: 1 addition & 3 deletions config/source/env/watcher.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package env

import (
"errors"

"github.com/micro/go-micro/config/source"
)

Expand All @@ -13,7 +11,7 @@ type watcher struct {
func (w *watcher) Next() (*source.ChangeSet, error) {
<-w.exit

return nil, errors.New("watcher stopped")
return nil, source.ErrWatcherStopped
}

func (w *watcher) Stop() error {
Expand Down
5 changes: 2 additions & 3 deletions config/source/file/watcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
package file

import (
"errors"
"os"

"github.com/fsnotify/fsnotify"
Expand Down Expand Up @@ -36,7 +35,7 @@ func (w *watcher) Next() (*source.ChangeSet, error) {
// is it closed?
select {
case <-w.exit:
return nil, errors.New("watcher stopped")
return nil, source.ErrWatcherStopped
default:
}

Expand All @@ -59,7 +58,7 @@ func (w *watcher) Next() (*source.ChangeSet, error) {
case err := <-w.fw.Errors:
return nil, err
case <-w.exit:
return nil, errors.New("watcher stopped")
return nil, source.ErrWatcherStopped
}
}

Expand Down
5 changes: 2 additions & 3 deletions config/source/file/watcher_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
package file

import (
"errors"
"os"

"github.com/fsnotify/fsnotify"
Expand Down Expand Up @@ -36,7 +35,7 @@ func (w *watcher) Next() (*source.ChangeSet, error) {
// is it closed?
select {
case <-w.exit:
return nil, errors.New("watcher stopped")
return nil, source.ErrWatcherStopped
default:
}

Expand All @@ -63,7 +62,7 @@ func (w *watcher) Next() (*source.ChangeSet, error) {
case err := <-w.fw.Errors:
return nil, err
case <-w.exit:
return nil, errors.New("watcher stopped")
return nil, source.ErrWatcherStopped
}
}

Expand Down
6 changes: 6 additions & 0 deletions config/source/source.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@
package source

import (
"errors"
"time"
)

var (
// ErrWatcherStopped is returned when source watcher has been stopped
ErrWatcherStopped = errors.New("watcher stopped")
)

// Source is the source from which config is loaded
type Source interface {
Read() (*ChangeSet, error)
Expand Down

0 comments on commit 0aea8e3

Please sign in to comment.