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  }