code.vegaprotocol.io/vega@v0.79.0/core/datasource/common/time_test.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 //lint:file-ignore ST1003 Ignore underscores in names, this is straigh copied from the proto package to ease introducing the domain types 17 18 package common_test 19 20 import ( 21 "fmt" 22 "testing" 23 "time" 24 25 "code.vegaprotocol.io/vega/core/datasource/common" 26 "code.vegaprotocol.io/vega/libs/ptr" 27 datapb "code.vegaprotocol.io/vega/protos/vega/data/v1" 28 29 "github.com/stretchr/testify/assert" 30 ) 31 32 func TestInternalTimeTriggerString(t *testing.T) { 33 timeNow := time.Now() 34 nt := timeNow.Add(time.Minute) 35 36 tt := common.InternalTimeTrigger{ 37 Initial: &timeNow, 38 Every: int64(15), 39 } 40 41 tt.SetNextTrigger(nt) 42 assert.Equal( 43 t, 44 fmt.Sprintf("initial(%s) every(15) nextTrigger(%s)", timeNow, nt), 45 tt.String(), 46 ) 47 } 48 49 func TestInternalTimeTriggerIntoProto(t *testing.T) { 50 timeNow := time.Now() 51 tt := common.InternalTimeTrigger{ 52 Initial: &timeNow, 53 Every: int64(15), 54 } 55 56 pt := tt.IntoProto() 57 assert.NotNil(t, pt) 58 assert.IsType(t, &datapb.InternalTimeTrigger{}, pt) 59 assert.Equal(t, timeNow.Unix(), *pt.Initial) 60 assert.Equal(t, int64(15), pt.Every) 61 } 62 63 func TestInternalTimeTriggerDeepClone(t *testing.T) { 64 timeNow := time.Now() 65 tt := common.InternalTimeTrigger{ 66 Initial: &timeNow, 67 Every: int64(15), 68 } 69 70 pt := tt.DeepClone() 71 assert.NotNil(t, pt) 72 assert.IsType(t, &common.InternalTimeTrigger{}, pt) 73 assert.Equal(t, timeNow, *pt.Initial) 74 assert.Equal(t, int64(15), pt.Every) 75 } 76 77 func TestInternalTimeTriggerIsTriggered(t *testing.T) { 78 timeNow := time.Now() 79 nt := timeNow.Add(time.Minute) 80 tt := common.InternalTimeTrigger{ 81 Initial: &timeNow, 82 Every: int64(15), 83 } 84 85 tt.SetNextTrigger(nt) 86 // Given time is before the next trigger 87 triggered := tt.IsTriggered(timeNow) 88 assert.Equal(t, false, triggered) 89 90 // Given time is the same as the next trigger 91 triggered = tt.IsTriggered(nt) 92 assert.Equal(t, false, triggered) 93 94 // Given time is after the next trigger 95 triggered = tt.IsTriggered(nt.Add(time.Second * 2)) 96 assert.Equal(t, true, triggered) 97 } 98 99 func TestInternalTimeTriggerFromProto(t *testing.T) { 100 timeNow := time.Now() 101 tt := common.InternalTimeTrigger{ 102 Initial: &timeNow, 103 Every: int64(15), 104 } 105 106 pt := tt.IntoProto() 107 ntt := common.InternalTimeTriggerFromProto(pt) 108 assert.NotNil(t, pt) 109 assert.IsType(t, &common.InternalTimeTrigger{}, ntt) 110 assert.Equal(t, ptr.From(time.Unix(timeNow.Unix(), 0)), ntt.Initial) 111 assert.Equal(t, int64(15), ntt.Every) 112 } 113 114 func TestInternalTimeTriggersString(t *testing.T) { 115 timeNow := time.Now() 116 117 tt := &common.InternalTimeTrigger{ 118 Initial: &timeNow, 119 Every: int64(15), 120 } 121 122 var ttl common.InternalTimeTriggers 123 assert.Equal(t, "[nil]", ttl.String()) 124 125 ttl = common.InternalTimeTriggers{} 126 assert.Equal(t, "[nil]", ttl.String()) 127 128 ttl = common.InternalTimeTriggers{tt} 129 assert.Equal( 130 t, 131 fmt.Sprintf("[initial(%s) every(15) nextTrigger(<nil>)]", timeNow), 132 ttl.String(), 133 ) 134 } 135 136 func TestInternalTimeTriggersIntoProto(t *testing.T) { 137 timeNow := time.Now() 138 tt := &common.InternalTimeTrigger{ 139 Initial: &timeNow, 140 Every: int64(15), 141 } 142 143 ttl := common.InternalTimeTriggers{tt} 144 145 pt := ttl.IntoProto() 146 assert.NotNil(t, pt) 147 assert.IsType(t, []*datapb.InternalTimeTrigger{}, pt) 148 assert.Equal(t, 1, len(pt)) 149 assert.Equal(t, timeNow.Unix(), *pt[0].Initial) 150 assert.Equal(t, int64(15), pt[0].Every) 151 } 152 153 func TestInternalTimeTriggersIsTriggered(t *testing.T) { 154 timeNow := time.Now() 155 nt := timeNow.Add(time.Minute) 156 tt := &common.InternalTimeTrigger{ 157 Initial: &timeNow, 158 Every: int64(15), 159 } 160 161 tt.SetNextTrigger(nt) 162 ttl := common.InternalTimeTriggers{tt} 163 164 // Given time is before the next trigger 165 triggered := ttl.IsTriggered(timeNow) 166 assert.Equal(t, false, triggered) 167 168 // Given time is the same as the next trigger 169 triggered = ttl.IsTriggered(nt) 170 assert.Equal(t, false, triggered) 171 172 // Given time is after the next trigger 173 triggered = ttl.IsTriggered(nt.Add(time.Second * 15)) 174 assert.Equal(t, true, triggered) 175 176 // check trigger time is progressed 177 triggered = ttl.IsTriggered(nt.Add(time.Second * 15)) 178 assert.Equal(t, false, triggered) 179 } 180 181 func TestInternalTimeTriggersIsTriggeredLongInterval(t *testing.T) { 182 timeNow := time.Now() 183 nt := timeNow.Add(time.Minute) 184 tt := &common.InternalTimeTrigger{ 185 Initial: &timeNow, 186 Every: int64(15), 187 } 188 189 tt.SetNextTrigger(nt) 190 ttl := common.InternalTimeTriggers{tt} 191 192 // Given time is after the next trigger many multiples of "every" 193 triggered := ttl.IsTriggered(nt.Add(time.Second * 60)) 194 assert.Equal(t, true, triggered) 195 196 // check we rolled forward and a past time is not triggered 197 triggered = ttl.IsTriggered(nt.Add(time.Second * 30)) 198 assert.Equal(t, false, triggered) 199 }