github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/helper/raftutil/msgpack_test.go (about)

     1  package raftutil
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/hashicorp/go-msgpack/codec"
    10  	"github.com/hashicorp/nomad/ci"
    11  	"github.com/hashicorp/nomad/nomad/structs"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func TestMaybeDecodeTimeIgnoresASCII(t *testing.T) {
    16  	cases := []string{
    17  		"127.0.0.1/32",
    18  		"host",
    19  	}
    20  
    21  	for _, c := range cases {
    22  		t.Run(c, func(t *testing.T) {
    23  			tt, err := maybeDecodeTime(c)
    24  			fmt.Println(tt)
    25  			require.Nil(t, tt)
    26  			require.Error(t, err)
    27  		})
    28  	}
    29  }
    30  
    31  func TestDecodesTime(t *testing.T) {
    32  	ci.Parallel(t)
    33  
    34  	type Value struct {
    35  		CreateTime time.Time
    36  		Mode       string
    37  	}
    38  	now := time.Now().Truncate(time.Second)
    39  	v := Value{
    40  		CreateTime: now,
    41  		Mode:       "host",
    42  	}
    43  
    44  	var buf bytes.Buffer
    45  	err := codec.NewEncoder(&buf, structs.MsgpackHandle).Encode(v)
    46  	require.NoError(t, err)
    47  
    48  	var r map[string]interface{}
    49  	err = codec.NewDecoder(&buf, structs.MsgpackHandle).Decode(&r)
    50  	require.NoError(t, err)
    51  
    52  	require.Equal(t, "host", r["Mode"])
    53  	require.IsType(t, "", r["CreateTime"])
    54  
    55  	fixTime(r)
    56  
    57  	expected := map[string]interface{}{
    58  		"CreateTime": now,
    59  		"Mode":       "host",
    60  	}
    61  	require.Equal(t, expected, r)
    62  }
    63  
    64  func TestMyDate(t *testing.T) {
    65  	ci.Parallel(t)
    66  
    67  	handler := &codec.MsgpackHandle{}
    68  	handler.TimeNotBuiltin = true
    69  
    70  	d := time.Date(2025, 7, 10, 8, 1, 56, 0, time.UTC)
    71  
    72  	var buf bytes.Buffer
    73  	err := codec.NewEncoder(&buf, handler).Encode(d)
    74  	require.NoError(t, err)
    75  
    76  	var s string
    77  	err = codec.NewDecoder(&buf, handler).Decode(&s)
    78  	require.NoError(t, err)
    79  
    80  	fmt.Printf("Original:    %q\nround trips: %q\n", d, s)
    81  }