fix parsing of last_run form yaml state

master
Oliver Tonnhofer 2016-12-08 16:01:37 +01:00
parent 6469b6c2ff
commit 3b22b6d736
2 changed files with 49 additions and 5 deletions

View File

@ -17,15 +17,33 @@ func NewChangesetDownloader(dest, url string, seq int, interval time.Duration) *
}
type changesetState struct {
Time time.Time `yaml:"last_run"`
Sequence int `yaml:"sequence"`
Time yamlStateTime `yaml:"last_run"`
Sequence int `yaml:"sequence"`
}
func parseYamlState(filename string) (changesetState, error) {
type yamlStateTime struct {
time.Time
}
func (y *yamlStateTime) UnmarshalYAML(unmarshal func(interface{}) error) error {
var ts string
if err := unmarshal(&ts); err != nil {
return err
}
t, err := time.Parse("2006-01-02 15:04:05.999999999 -07:00", ts)
y.Time = t
return err
}
func parseYamlStateFile(filename string) (changesetState, error) {
b, err := ioutil.ReadFile(filename)
if err != nil {
return changesetState{}, err
}
return parseYamlState(b)
}
func parseYamlState(b []byte) (changesetState, error) {
state := changesetState{}
if err := yaml.Unmarshal(b, &state); err != nil {
return changesetState{}, err
@ -34,9 +52,9 @@ func parseYamlState(filename string) (changesetState, error) {
}
func parseYamlTime(filename string) (time.Time, error) {
state, err := parseYamlState(filename)
state, err := parseYamlStateFile(filename)
if err != nil {
return time.Time{}, err
}
return state.Time, nil
return state.Time.Time, nil
}

View File

@ -0,0 +1,26 @@
package replication
import (
"time"
"testing"
)
func TestParseYamlState(t *testing.T) {
state, err := parseYamlState([]byte(`---
last_run: 2016-12-07 19:16:01.500000000 +00:00
sequence: 2139110
`))
if err != nil {
t.Fatal(err)
}
if state.Sequence != 2139110 {
t.Error("unexpected sequence", state)
}
expected := time.Date(2016, 12, 07, 19, 16, 01, 500000000, time.UTC)
if !state.Time.Time.Equal(expected) {
t.Error("unexpected time", state)
}
}