1package mstypes
2
3import (
4	"bytes"
5	"encoding/hex"
6	"github.com/jcmturner/rpc/v2/ndr"
7	"github.com/stretchr/testify/assert"
8	"testing"
9	"time"
10)
11
12const TestNDRHeader = "01100800cccccccca00400000000000000000200"
13
14func TestFileTime(t *testing.T) {
15	t.Parallel()
16	//2007-02-22 17:00:01.6382155
17	tt := time.Date(2007, 2, 22, 17, 0, 1, 638215500, time.UTC)
18	ft := GetFileTime(tt)
19	assert.Equal(t, tt.Unix(), ft.Unix(), "Unix epoch time not as expected")
20	assert.Equal(t, int64(128166372016382155), ft.MSEpoch(), "MSEpoch not as expected")
21	assert.Equal(t, tt, ft.Time(), "Golang time object returned from FileTime not as expected")
22}
23
24func TestDecodeFileTime(t *testing.T) {
25	var tests = []struct {
26		Hex      string
27		UnixNano int64
28	}{
29		{"d186660f656ac601", 1146188570925640100},
30		{"17d439fe784ac601", 1142678694837147900},
31		{"1794a328424bc601", 1142765094837147900},
32		{"175424977a81c601", 1148726694837147900},
33		{"058e4fdd80c6d201", 1494085991825766900},
34		{"cc27969c39c6d201", 1494055388968750000},
35		{"cce7ffc602c7d201", 1494141788968750000},
36		{"c30bcc79e444d301", 1507982621052409900},
37		{"c764125a0842d301", 1507668176220282300},
38		{"c7247c84d142d301", 1507754576220282300},
39	}
40
41	for i, test := range tests {
42		a := new(FileTime)
43		hexStr := TestNDRHeader + test.Hex
44		b, _ := hex.DecodeString(hexStr)
45		dec := ndr.NewDecoder(bytes.NewReader(b))
46		err := dec.Decode(a)
47		if err != nil {
48			t.Fatalf("test %d: %v", i+1, err)
49		}
50		assert.Equal(t, test.UnixNano, a.Time().UnixNano(), "Time value not as expected for test: %d", i+1)
51	}
52}
53