github.com/MetalBlockchain/metalgo@v1.11.9/version/compatibility_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package version 5 6 import ( 7 "fmt" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestCompatibility(t *testing.T) { 15 v := &Application{ 16 Name: Client, 17 Major: 1, 18 Minor: 4, 19 Patch: 3, 20 } 21 minCompatible := &Application{ 22 Name: Client, 23 Major: 1, 24 Minor: 4, 25 Patch: 0, 26 } 27 minCompatibleTime := time.Unix(9000, 0) 28 prevMinCompatible := &Application{ 29 Name: Client, 30 Major: 1, 31 Minor: 3, 32 Patch: 0, 33 } 34 35 compatibility := NewCompatibility( 36 v, 37 minCompatible, 38 minCompatibleTime, 39 prevMinCompatible, 40 ).(*compatibility) 41 require.Equal(t, v, compatibility.Version()) 42 43 tests := []struct { 44 peer *Application 45 time time.Time 46 expectedErr error 47 }{ 48 { 49 peer: &Application{ 50 Name: Client, 51 Major: 1, 52 Minor: 5, 53 Patch: 0, 54 }, 55 time: minCompatibleTime, 56 }, 57 { 58 peer: &Application{ 59 Name: Client, 60 Major: 1, 61 Minor: 3, 62 Patch: 5, 63 }, 64 time: time.Unix(8500, 0), 65 }, 66 { 67 peer: &Application{ 68 Name: Client, 69 Major: 0, 70 Minor: 1, 71 Patch: 0, 72 }, 73 time: minCompatibleTime, 74 expectedErr: errDifferentMajor, 75 }, 76 { 77 peer: &Application{ 78 Name: Client, 79 Major: 1, 80 Minor: 3, 81 Patch: 5, 82 }, 83 time: minCompatibleTime, 84 expectedErr: errIncompatible, 85 }, 86 { 87 peer: &Application{ 88 Name: Client, 89 Major: 1, 90 Minor: 2, 91 Patch: 5, 92 }, 93 time: time.Unix(8500, 0), 94 expectedErr: errIncompatible, 95 }, 96 { 97 peer: &Application{ 98 Name: Client, 99 Major: 1, 100 Minor: 1, 101 Patch: 5, 102 }, 103 time: time.Unix(7500, 0), 104 expectedErr: errIncompatible, 105 }, 106 } 107 for _, test := range tests { 108 peer := test.peer 109 compatibility.clock.Set(test.time) 110 t.Run(fmt.Sprintf("%s-%s", peer, test.time), func(t *testing.T) { 111 err := compatibility.Compatible(peer) 112 require.ErrorIs(t, err, test.expectedErr) 113 }) 114 } 115 }