github.com/ncw/rclone@v1.48.1-0.20190724201158-a35aa1360e3e/fs/bwtimetable_test.go (about)

     1  package fs
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/spf13/pflag"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // Check it satisfies the interface
    13  var _ pflag.Value = (*BwTimetable)(nil)
    14  
    15  func TestBwTimetableSet(t *testing.T) {
    16  	for _, test := range []struct {
    17  		in   string
    18  		want BwTimetable
    19  		err  bool
    20  	}{
    21  		{"", BwTimetable{}, true},
    22  		{"bad,bad", BwTimetable{}, true},
    23  		{"bad bad", BwTimetable{}, true},
    24  		{"bad", BwTimetable{}, true},
    25  		{"1000X", BwTimetable{}, true},
    26  		{"2401,666", BwTimetable{}, true},
    27  		{"1061,666", BwTimetable{}, true},
    28  		{"bad-10:20,666", BwTimetable{}, true},
    29  		{"Mon-bad,666", BwTimetable{}, true},
    30  		{"Mon-10:20,bad", BwTimetable{}, true},
    31  		{
    32  			"0",
    33  			BwTimetable{
    34  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 0, Bandwidth: 0},
    35  			},
    36  			false,
    37  		},
    38  		{
    39  			"666",
    40  			BwTimetable{
    41  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 0, Bandwidth: 666 * 1024},
    42  			},
    43  			false,
    44  		},
    45  		{
    46  			"10:20,666",
    47  			BwTimetable{
    48  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1020, Bandwidth: 666 * 1024},
    49  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1020, Bandwidth: 666 * 1024},
    50  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1020, Bandwidth: 666 * 1024},
    51  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1020, Bandwidth: 666 * 1024},
    52  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1020, Bandwidth: 666 * 1024},
    53  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1020, Bandwidth: 666 * 1024},
    54  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1020, Bandwidth: 666 * 1024},
    55  			},
    56  			false,
    57  		},
    58  		{
    59  			"11:00,333 13:40,666 23:50,10M 23:59,off",
    60  			BwTimetable{
    61  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: 333 * 1024},
    62  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
    63  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: 333 * 1024},
    64  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: 333 * 1024},
    65  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
    66  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: 333 * 1024},
    67  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: 333 * 1024},
    68  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1340, Bandwidth: 666 * 1024},
    69  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1340, Bandwidth: 666 * 1024},
    70  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
    71  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1340, Bandwidth: 666 * 1024},
    72  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1340, Bandwidth: 666 * 1024},
    73  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1340, Bandwidth: 666 * 1024},
    74  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1340, Bandwidth: 666 * 1024},
    75  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    76  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    77  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    78  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    79  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    80  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    81  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2350, Bandwidth: 10 * 1024 * 1024},
    82  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2359, Bandwidth: -1},
    83  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2359, Bandwidth: -1},
    84  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2359, Bandwidth: -1},
    85  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2359, Bandwidth: -1},
    86  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2359, Bandwidth: -1},
    87  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2359, Bandwidth: -1},
    88  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2359, Bandwidth: -1},
    89  			},
    90  			false,
    91  		},
    92  		{
    93  			"Mon-11:00,333 Tue-13:40,666 Fri-00:00,10M Sat-10:00,off Sun-23:00,666",
    94  			BwTimetable{
    95  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
    96  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
    97  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: 10 * 1024 * 1024},
    98  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1000, Bandwidth: -1},
    99  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: 666 * 1024},
   100  			},
   101  			false,
   102  		},
   103  		{
   104  			"Mon-11:00,333 Tue-13:40,666 Fri-00:00,10M 00:01,off Sun-23:00,666",
   105  			BwTimetable{
   106  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   107  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
   108  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: 10 * 1024 * 1024},
   109  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1, Bandwidth: -1},
   110  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1, Bandwidth: -1},
   111  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1, Bandwidth: -1},
   112  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1, Bandwidth: -1},
   113  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1, Bandwidth: -1},
   114  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1, Bandwidth: -1},
   115  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1, Bandwidth: -1},
   116  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: 666 * 1024},
   117  			},
   118  			false,
   119  		},
   120  	} {
   121  		tt := BwTimetable{}
   122  		err := tt.Set(test.in)
   123  		if test.err {
   124  			require.Error(t, err)
   125  		} else {
   126  			require.NoError(t, err)
   127  		}
   128  		assert.Equal(t, test.want, tt)
   129  	}
   130  }
   131  
   132  func TestBwTimetableLimitAt(t *testing.T) {
   133  	for _, test := range []struct {
   134  		tt   BwTimetable
   135  		now  time.Time
   136  		want BwTimeSlot
   137  	}{
   138  		{
   139  			BwTimetable{},
   140  			time.Date(2017, time.April, 20, 15, 0, 0, 0, time.UTC),
   141  			BwTimeSlot{DayOfTheWeek: 0, HHMM: 0, Bandwidth: -1},
   142  		},
   143  		{
   144  			BwTimetable{
   145  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: 333 * 1024},
   146  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   147  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: 333 * 1024},
   148  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: 333 * 1024},
   149  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   150  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: 333 * 1024},
   151  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: 333 * 1024},
   152  			},
   153  			time.Date(2017, time.April, 20, 15, 0, 0, 0, time.UTC),
   154  			BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   155  		},
   156  		{
   157  			BwTimetable{
   158  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: 333 * 1024},
   159  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   160  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: 333 * 1024},
   161  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: 333 * 1024},
   162  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   163  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: 333 * 1024},
   164  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: 333 * 1024},
   165  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1300, Bandwidth: 666 * 1024},
   166  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1300, Bandwidth: 666 * 1024},
   167  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1300, Bandwidth: 666 * 1024},
   168  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1300, Bandwidth: 666 * 1024},
   169  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1300, Bandwidth: 666 * 1024},
   170  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1300, Bandwidth: 666 * 1024},
   171  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1300, Bandwidth: 666 * 1024},
   172  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2301, Bandwidth: 1024 * 1024},
   173  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2301, Bandwidth: 1024 * 1024},
   174  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2301, Bandwidth: 1024 * 1024},
   175  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2301, Bandwidth: 1024 * 1024},
   176  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2301, Bandwidth: 1024 * 1024},
   177  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2301, Bandwidth: 1024 * 1024},
   178  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2301, Bandwidth: 1024 * 1024},
   179  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2350, Bandwidth: -1},
   180  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2350, Bandwidth: -1},
   181  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2350, Bandwidth: -1},
   182  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: -1},
   183  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: -1},
   184  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2350, Bandwidth: -1},
   185  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2350, Bandwidth: -1},
   186  			},
   187  			time.Date(2017, time.April, 20, 10, 15, 0, 0, time.UTC),
   188  			BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: -1},
   189  		},
   190  		{
   191  			BwTimetable{
   192  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: 333 * 1024},
   193  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   194  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: 333 * 1024},
   195  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: 333 * 1024},
   196  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   197  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: 333 * 1024},
   198  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: 333 * 1024},
   199  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1300, Bandwidth: 666 * 1024},
   200  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1300, Bandwidth: 666 * 1024},
   201  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1300, Bandwidth: 666 * 1024},
   202  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1300, Bandwidth: 666 * 1024},
   203  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1300, Bandwidth: 666 * 1024},
   204  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1300, Bandwidth: 666 * 1024},
   205  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1300, Bandwidth: 666 * 1024},
   206  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2301, Bandwidth: 1024 * 1024},
   207  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2301, Bandwidth: 1024 * 1024},
   208  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2301, Bandwidth: 1024 * 1024},
   209  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2301, Bandwidth: 1024 * 1024},
   210  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2301, Bandwidth: 1024 * 1024},
   211  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2301, Bandwidth: 1024 * 1024},
   212  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2301, Bandwidth: 1024 * 1024},
   213  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2350, Bandwidth: -1},
   214  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2350, Bandwidth: -1},
   215  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2350, Bandwidth: -1},
   216  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: -1},
   217  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: -1},
   218  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2350, Bandwidth: -1},
   219  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2350, Bandwidth: -1},
   220  			},
   221  			time.Date(2017, time.April, 20, 11, 0, 0, 0, time.UTC),
   222  			BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   223  		},
   224  		{
   225  			BwTimetable{
   226  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: 333 * 1024},
   227  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   228  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: 333 * 1024},
   229  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: 333 * 1024},
   230  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   231  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: 333 * 1024},
   232  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: 333 * 1024},
   233  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1300, Bandwidth: 666 * 1024},
   234  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1300, Bandwidth: 666 * 1024},
   235  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1300, Bandwidth: 666 * 1024},
   236  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1300, Bandwidth: 666 * 1024},
   237  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1300, Bandwidth: 666 * 1024},
   238  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1300, Bandwidth: 666 * 1024},
   239  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1300, Bandwidth: 666 * 1024},
   240  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2301, Bandwidth: 1024 * 1024},
   241  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2301, Bandwidth: 1024 * 1024},
   242  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2301, Bandwidth: 1024 * 1024},
   243  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2301, Bandwidth: 1024 * 1024},
   244  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2301, Bandwidth: 1024 * 1024},
   245  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2301, Bandwidth: 1024 * 1024},
   246  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2301, Bandwidth: 1024 * 1024},
   247  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2350, Bandwidth: -1},
   248  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2350, Bandwidth: -1},
   249  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2350, Bandwidth: -1},
   250  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: -1},
   251  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: -1},
   252  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2350, Bandwidth: -1},
   253  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2350, Bandwidth: -1},
   254  			},
   255  			time.Date(2017, time.April, 20, 13, 1, 0, 0, time.UTC),
   256  			BwTimeSlot{DayOfTheWeek: 4, HHMM: 1300, Bandwidth: 666 * 1024},
   257  		},
   258  		{
   259  			BwTimetable{
   260  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1100, Bandwidth: 333 * 1024},
   261  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   262  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1100, Bandwidth: 333 * 1024},
   263  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1100, Bandwidth: 333 * 1024},
   264  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1100, Bandwidth: 333 * 1024},
   265  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1100, Bandwidth: 333 * 1024},
   266  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1100, Bandwidth: 333 * 1024},
   267  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 1300, Bandwidth: 666 * 1024},
   268  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1300, Bandwidth: 666 * 1024},
   269  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1300, Bandwidth: 666 * 1024},
   270  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 1300, Bandwidth: 666 * 1024},
   271  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 1300, Bandwidth: 666 * 1024},
   272  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 1300, Bandwidth: 666 * 1024},
   273  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1300, Bandwidth: 666 * 1024},
   274  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2301, Bandwidth: 1024 * 1024},
   275  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2301, Bandwidth: 1024 * 1024},
   276  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2301, Bandwidth: 1024 * 1024},
   277  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2301, Bandwidth: 1024 * 1024},
   278  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2301, Bandwidth: 1024 * 1024},
   279  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2301, Bandwidth: 1024 * 1024},
   280  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2301, Bandwidth: 1024 * 1024},
   281  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2350, Bandwidth: -1},
   282  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 2350, Bandwidth: -1},
   283  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 2350, Bandwidth: -1},
   284  				BwTimeSlot{DayOfTheWeek: 3, HHMM: 2350, Bandwidth: -1},
   285  				BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: -1},
   286  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 2350, Bandwidth: -1},
   287  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 2350, Bandwidth: -1},
   288  			},
   289  			time.Date(2017, time.April, 20, 23, 59, 0, 0, time.UTC),
   290  			BwTimeSlot{DayOfTheWeek: 4, HHMM: 2350, Bandwidth: -1},
   291  		},
   292  		{
   293  			BwTimetable{
   294  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   295  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
   296  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: 10 * 1024 * 1024},
   297  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1000, Bandwidth: -1},
   298  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: 666 * 1024},
   299  			},
   300  			time.Date(2017, time.April, 20, 23, 59, 0, 0, time.UTC),
   301  			BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
   302  		},
   303  		{
   304  			BwTimetable{
   305  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   306  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
   307  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: 10 * 1024 * 1024},
   308  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1000, Bandwidth: -1},
   309  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: 666 * 1024},
   310  			},
   311  			time.Date(2017, time.April, 21, 23, 59, 0, 0, time.UTC),
   312  			BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: 10 * 1024 * 1024},
   313  		},
   314  		{
   315  			BwTimetable{
   316  				BwTimeSlot{DayOfTheWeek: 1, HHMM: 1100, Bandwidth: 333 * 1024},
   317  				BwTimeSlot{DayOfTheWeek: 2, HHMM: 1340, Bandwidth: 666 * 1024},
   318  				BwTimeSlot{DayOfTheWeek: 5, HHMM: 0000, Bandwidth: 10 * 1024 * 1024},
   319  				BwTimeSlot{DayOfTheWeek: 6, HHMM: 1000, Bandwidth: -1},
   320  				BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: 666 * 1024},
   321  			},
   322  			time.Date(2017, time.April, 17, 10, 59, 0, 0, time.UTC),
   323  			BwTimeSlot{DayOfTheWeek: 0, HHMM: 2300, Bandwidth: 666 * 1024},
   324  		},
   325  	} {
   326  		slot := test.tt.LimitAt(test.now)
   327  		assert.Equal(t, test.want, slot)
   328  	}
   329  }