blob: a2c9893a92d38be09ca278be6c9a7b2bb4ecb913 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package util_test
import (
"io/ioutil"
"os"
"path/filepath"
"reflect"
"testing"
"time"
"v.io/jiri/jiri"
"v.io/jiri/jiritest"
"v.io/jiri/util"
)
func createOncallFile(t *testing.T, jirix *jiri.X) {
content := `<?xml version="1.0" ?>
<rotation>
<shift>
<primary>spetrovic</primary>
<secondary>suharshs</secondary>
<startDate>Nov 5, 2014 12:00:00 PM</startDate>
</shift>
<shift>
<primary>suharshs</primary>
<secondary>jingjin</secondary>
<startDate>Nov 12, 2014 12:00:00 PM</startDate>
</shift>
<shift>
<primary>jsimsa</primary>
<secondary>toddw</secondary>
<startDate>Nov 19, 2014 12:00:00 PM</startDate>
</shift>
</rotation>`
oncallRotationsFile, err := util.OncallRotationPath(jirix)
if err != nil {
t.Fatalf("%v", err)
}
dir := filepath.Dir(oncallRotationsFile)
dirMode := os.FileMode(0700)
if err := jirix.NewSeq().MkdirAll(dir, dirMode).Done(); err != nil {
t.Fatalf("MkdirAll(%q, %v) failed: %v", dir, dirMode, err)
}
fileMode := os.FileMode(0644)
if err := ioutil.WriteFile(oncallRotationsFile, []byte(content), fileMode); err != nil {
t.Fatalf("WriteFile(%q, %q, %v) failed: %v", oncallRotationsFile, content, fileMode, err)
}
}
func TestOncall(t *testing.T) {
fake, cleanup := jiritest.NewFakeJiriRoot(t)
defer cleanup()
// Create a oncall.v1.xml file.
createOncallFile(t, fake.X)
testCases := []struct {
targetTime time.Time
expectedShift *util.OncallShift
}{
{
time.Date(2013, time.November, 5, 12, 0, 0, 0, time.Local),
nil,
},
{
time.Date(2014, time.November, 5, 12, 0, 0, 0, time.Local),
&util.OncallShift{
Primary: "spetrovic",
Secondary: "suharshs",
Date: "Nov 5, 2014 12:00:00 PM",
},
},
{
time.Date(2014, time.November, 5, 14, 0, 0, 0, time.Local),
&util.OncallShift{
Primary: "spetrovic",
Secondary: "suharshs",
Date: "Nov 5, 2014 12:00:00 PM",
},
},
{
time.Date(2014, time.November, 20, 14, 0, 0, 0, time.Local),
&util.OncallShift{
Primary: "jsimsa",
Secondary: "toddw",
Date: "Nov 19, 2014 12:00:00 PM",
},
},
}
for _, test := range testCases {
got, err := util.Oncall(fake.X, test.targetTime)
if err != nil {
t.Fatalf("want no errors, got: %v", err)
}
if !reflect.DeepEqual(test.expectedShift, got) {
t.Fatalf("want %#v, got %#v", test.expectedShift, got)
}
}
}