github.com/uber/kraken@v0.1.4/lib/torrent/networkevent/testing.go (about) 1 // Copyright (c) 2016-2019 Uber Technologies, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 package networkevent 15 16 import "sync" 17 18 // TestProducer records all produced events. 19 type TestProducer struct { 20 sync.Mutex 21 events []*Event 22 } 23 24 // NewTestProducer returns a new TestProducer. 25 func NewTestProducer() *TestProducer { 26 return &TestProducer{} 27 } 28 29 // Produce records e. 30 func (p *TestProducer) Produce(e *Event) { 31 p.Lock() 32 defer p.Unlock() 33 34 p.events = append(p.events, e) 35 } 36 37 // Close noops. 38 func (p *TestProducer) Close() error { return nil } 39 40 // Events returns all currently recorded events. 41 func (p *TestProducer) Events() []*Event { 42 p.Lock() 43 defer p.Unlock() 44 45 res := make([]*Event, len(p.events)) 46 copy(res, p.events) 47 return res 48 }