github.com/uber/kraken@v0.1.4/lib/torrent/scheduler/announcequeue/queue_test.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 announcequeue 15 16 import ( 17 "testing" 18 19 "github.com/uber/kraken/core" 20 21 "github.com/stretchr/testify/require" 22 ) 23 24 func TestQueueReadyAfterNextMovesTorrentIntoQueue(t *testing.T) { 25 require := require.New(t) 26 q := New() 27 h := core.InfoHashFixture() 28 29 q.Add(h) 30 31 n, ok := q.Next() 32 require.True(ok) 33 require.Equal(h, n) 34 35 _, ok = q.Next() 36 require.False(ok) 37 38 q.Ready(h) 39 40 // Ensure we remove h from pending map once ready. 41 require.False(q.pending[h]) 42 43 n, ok = q.Next() 44 require.True(ok) 45 require.Equal(h, n) 46 } 47 48 func TestQueueEjectDeletesTorrentInAllStates(t *testing.T) { 49 tests := []struct { 50 description string 51 setup func(*QueueImpl, core.InfoHash) 52 }{ 53 {"torrent in middle of queue", func(q *QueueImpl, h core.InfoHash) { 54 q.Add(core.InfoHashFixture()) 55 q.Add(h) 56 q.Add(core.InfoHashFixture()) 57 }}, 58 {"torrent ready", func(q *QueueImpl, h core.InfoHash) { 59 q.Add(h) 60 q.Next() 61 }}, 62 } 63 for _, test := range tests { 64 t.Run(test.description, func(t *testing.T) { 65 require := require.New(t) 66 67 q := New() 68 h := core.InfoHashFixture() 69 test.setup(q, h) 70 71 q.Eject(h) 72 73 require.False(q.pending[h]) 74 for { 75 n, ok := q.Next() 76 if !ok { 77 break 78 } 79 require.False(h == n) 80 } 81 }) 82 } 83 }