github.com/Files-com/files-sdk-go/v3@v3.1.81/file/job_test.go (about) 1 package file 2 3 import ( 4 "testing" 5 "time" 6 7 files_sdk "github.com/Files-com/files-sdk-go/v3" 8 "github.com/Files-com/files-sdk-go/v3/file/status" 9 "github.com/Files-com/files-sdk-go/v3/lib" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 type StatusFile struct { 14 file JobFile 15 status.Changes 16 } 17 18 func (f StatusFile) StatusChanges() status.Changes { 19 return f.Changes 20 } 21 22 func (f StatusFile) SetStatus(status status.Status, _ error) { 23 f.file.Status = status 24 } 25 26 func (f StatusFile) TransferBytes() int64 { 27 return f.file.TransferBytes 28 } 29 30 func (f StatusFile) IncrementTransferBytes(int64) {} 31 32 func (f StatusFile) File() files_sdk.File { 33 return f.file.File 34 } 35 36 func (f StatusFile) LocalPath() string { 37 return f.file.LocalPath 38 } 39 40 func (f StatusFile) RemotePath() string { 41 return f.file.RemotePath 42 } 43 44 func (f StatusFile) Status() status.Status { 45 return f.file.Status 46 } 47 48 func (f StatusFile) Err() error { 49 return f.file.Err 50 } 51 52 func (f StatusFile) Job() *Job { 53 return f.file.Job 54 } 55 56 func (f StatusFile) Id() string { 57 return f.file.Id 58 } 59 60 func (f StatusFile) Size() int64 { 61 return f.file.Size 62 } 63 64 func (f StatusFile) EndedAt() time.Time { 65 return time.Time{} 66 } 67 68 func (f StatusFile) StartedAt() time.Time { 69 return time.Time{} 70 } 71 72 func TestJob_TransferRate(t *testing.T) { 73 assert := assert.New(t) 74 job := (&Job{Logger: lib.NullLogger{}}).Init() 75 job.Timer.Start() 76 file := StatusFile{file: JobFile{Status: status.Downloading}} 77 job.Add(file) 78 job.UpdateStatusWithBytes(status.Uploading, file, 1000) 79 assert.InDelta(int64(200), job.TransferRate(), 100) 80 time.Sleep(1 * time.Second) 81 assert.InDelta(int64(200), job.TransferRate(), 100) 82 assert.Equal(false, job.Idle(), "Nothing has happened recently so rate is zero") 83 } 84 85 func TestJob_ETA(t *testing.T) { 86 assert := assert.New(t) 87 job := (&Job{Logger: lib.NullLogger{}}).Init() 88 job.Timer.Start() 89 file := StatusFile{ 90 file: JobFile{ 91 Status: status.Downloading, 92 Size: 10000, 93 }, 94 } 95 job.Add(file) 96 job.UpdateStatusWithBytes(status.Uploading, file, 1000) 97 time.Sleep(1 * time.Second) 98 assert.InDelta(50000, job.ETA().Milliseconds(), 100) 99 } 100 101 func TestJob_ElapsedTime(t *testing.T) { 102 assert := assert.New(t) 103 job := (&Job{}).Init() 104 job.Start() 105 106 file := StatusFile{ 107 file: JobFile{ 108 TransferBytes: 1000, 109 Status: status.Complete, 110 Size: 10000, 111 }, 112 } 113 file.file.TransferBytes = +5000 114 time.Sleep(1 * time.Second) 115 file.file.TransferBytes = +5000 116 time.Sleep(1 * time.Second) 117 file.file.Status = status.Complete 118 job.Stop() 119 120 job.Add(file) 121 assert.InDelta(2000, job.ElapsedTime().Milliseconds(), 100) 122 } 123 124 func TestJob_TotalBytes(t *testing.T) { 125 assert := assert.New(t) 126 job := (&Job{}).Init() 127 file := StatusFile{} 128 file.file.Status = status.Complete 129 file.file.Size = 10000 130 job.Add(file) 131 job.Add(file) 132 job.Add(file) 133 assert.Equal(int64(30000), job.TotalBytes()) 134 } 135 136 func TestJob_RemainingBytes(t *testing.T) { 137 assert := assert.New(t) 138 job := (&Job{}).Init() 139 file := StatusFile{} 140 file.file.Status = status.Complete 141 file.file.Size = 10000 142 job.Add(file) 143 file.file.TransferBytes = +5000 144 job.Add(file) 145 file.file.TransferBytes = +5000 146 job.Add(file) 147 assert.Equal(int64(20000), job.RemainingBytes()) 148 } 149 150 func TestJob_Count(t *testing.T) { 151 assert := assert.New(t) 152 job := (&Job{}).Init() 153 file := StatusFile{} 154 file.file.Status = status.Complete 155 file.file.Size = 10000 156 job.Add(file) 157 job.Add(file) 158 file.file.Status = status.Queued 159 job.Add(file) 160 file.file.Status = status.Errored 161 job.Add(file) 162 assert.Equal(3, job.Count(status.Ended...)) 163 assert.Equal(4, job.Count()) 164 } 165 166 func TestJob_Sub(t *testing.T) { 167 assert := assert.New(t) 168 job := (&Job{}).Init() 169 file := StatusFile{} 170 file.file.Status = status.Complete 171 file.file.Size = 10000 172 job.Add(file) 173 job.Add(file) 174 file.file.Status = status.Queued 175 job.Add(file) 176 file.file.Status = status.Errored 177 job.Add(file) 178 file.file.Status = status.Ignored 179 job.Add(file) 180 file.file.Status = status.Skipped 181 job.Add(file) 182 assert.Equal(3, job.Sub(status.Valid...).Count()) 183 assert.Equal(2, job.Sub(status.Valid...).Count(status.Ended...)) 184 assert.Equal(2, job.Sub(status.Excluded...).Count()) 185 assert.Equal(1, job.Sub(status.Excluded...).Count(status.Skipped)) 186 assert.Equal(6, job.Count()) 187 assert.Equal(true, job.Any(status.Skipped)) 188 assert.Equal(true, job.Any(status.Ignored)) 189 assert.Equal(false, job.Any(status.Running...)) 190 } 191 192 func TestJob_Percentage(t *testing.T) { 193 assert := assert.New(t) 194 job := (&Job{}).Init() 195 file := StatusFile{} 196 file.file.Status = status.Complete 197 file.file.Size = 100 198 file.file.TransferBytes = 100 199 job.Add(file) 200 job.Add(file) 201 file.file.TransferBytes = 0 202 file.file.Status = status.Queued 203 job.Add(file) 204 file.file.TransferBytes = 50 205 file.file.Status = status.Errored 206 job.Add(file) 207 file.file.TransferBytes = 0 208 file.file.Status = status.Ignored 209 job.Add(file) 210 file.file.TransferBytes = 0 211 file.file.Status = status.Skipped 212 job.Add(file) 213 assert.Equal(62, job.Percentage(status.Included...)) // 250 / 400 214 215 job = (&Job{}).Init() 216 file = StatusFile{} 217 file.file.Status = status.Canceled 218 file.file.Size = 100 219 file.file.TransferBytes = 1 220 job.Add(file) 221 assert.Equal(1, job.Percentage(status.Included...)) 222 } 223 224 func TestJob_Called(t *testing.T) { 225 assert := assert.New(t) 226 job := (&Job{}).Init() 227 228 job.Start() 229 230 assert.Equal(true, job.Started.Called()) 231 assert.Equal(false, job.Finished.Called()) 232 job.Finish() 233 assert.Equal(true, job.Finished.Called()) 234 job.ClearCalled() 235 assert.Equal(false, job.Started.Called()) 236 assert.Equal(false, job.Finished.Called()) 237 }