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