| // Copyright 2015 The etcd Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package store |
| |
| import ( |
| "testing" |
| ) |
| |
| func TestWatcher(t *testing.T) { |
| s := newStore() |
| wh := s.WatcherHub |
| w, err := wh.watch("/foo", true, false, 1, 1) |
| if err != nil { |
| t.Fatalf("%v", err) |
| } |
| c := w.EventChan() |
| |
| select { |
| case <-c: |
| t.Fatal("should not receive from channel before send the event") |
| default: |
| // do nothing |
| } |
| |
| e := newEvent(Create, "/foo/bar", 1, 1) |
| |
| wh.notify(e) |
| |
| re := <-c |
| |
| if e != re { |
| t.Fatal("recv != send") |
| } |
| |
| w, _ = wh.watch("/foo", false, false, 2, 1) |
| c = w.EventChan() |
| |
| e = newEvent(Create, "/foo/bar", 2, 2) |
| |
| wh.notify(e) |
| |
| select { |
| case re = <-c: |
| t.Fatal("should not receive from channel if not recursive ", re) |
| default: |
| // do nothing |
| } |
| |
| e = newEvent(Create, "/foo", 3, 3) |
| |
| wh.notify(e) |
| |
| re = <-c |
| |
| if e != re { |
| t.Fatal("recv != send") |
| } |
| |
| // ensure we are doing exact matching rather than prefix matching |
| w, _ = wh.watch("/fo", true, false, 1, 1) |
| c = w.EventChan() |
| |
| select { |
| case re = <-c: |
| t.Fatal("should not receive from channel:", re) |
| default: |
| // do nothing |
| } |
| |
| e = newEvent(Create, "/fo/bar", 3, 3) |
| |
| wh.notify(e) |
| |
| re = <-c |
| |
| if e != re { |
| t.Fatal("recv != send") |
| } |
| |
| } |