go.nanomsg.org/mangos/v3@v3.4.3-0.20240217232803-46464076f1f5/internal/test/options.go (about) 1 // Copyright 2019 The Mangos Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use file except in compliance with the License. 5 // You may obtain a copy of the license at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package test 16 17 import ( 18 "reflect" 19 "testing" 20 "time" 21 22 "go.nanomsg.org/mangos/v3" 23 ) 24 25 // VerifyInvalidOption verifies that invalid options fail. 26 func VerifyInvalidOption(t *testing.T, f func() (mangos.Socket, error)) { 27 s, err := f() 28 MustSucceed(t, err) 29 _, err = s.GetOption("NoSuchOption") 30 MustBeError(t, err, mangos.ErrBadOption) 31 32 MustBeError(t, s.SetOption("NoSuchOption", 0), mangos.ErrBadOption) 33 MustSucceed(t, s.Close()) 34 } 35 36 // VerifyOptionDuration validates time.Duration options 37 func VerifyOptionDuration(t *testing.T, f func() (mangos.Socket, error), option string) { 38 s, err := f() 39 MustSucceed(t, err) 40 val, err := s.GetOption(option) 41 MustSucceed(t, err) 42 MustBeTrue(t, reflect.TypeOf(val) == reflect.TypeOf(time.Duration(0))) 43 44 MustSucceed(t, s.SetOption(option, time.Second)) 45 val, err = s.GetOption(option) 46 MustSucceed(t, err) 47 MustBeTrue(t, val.(time.Duration) == time.Second) 48 49 MustBeError(t, s.SetOption(option, time.Now()), mangos.ErrBadValue) 50 MustBeError(t, s.SetOption(option, "junk"), mangos.ErrBadValue) 51 MustSucceed(t, s.Close()) 52 } 53 54 // VerifyOptionInt validates integer options. 55 func VerifyOptionInt(t *testing.T, f func() (mangos.Socket, error), option string) { 56 s, err := f() 57 MustSucceed(t, err) 58 val, err := s.GetOption(option) 59 MustSucceed(t, err) 60 MustBeTrue(t, reflect.TypeOf(val) == reflect.TypeOf(1)) 61 62 MustSucceed(t, s.SetOption(option, 2)) 63 val, err = s.GetOption(option) 64 MustSucceed(t, err) 65 MustBeTrue(t, val.(int) == 2) 66 67 MustBeError(t, s.SetOption(option, time.Now()), mangos.ErrBadValue) 68 MustBeError(t, s.SetOption(option, "junk"), mangos.ErrBadValue) 69 MustSucceed(t, s.Close()) 70 } 71 72 // VerifyOptionQLen validates queue length options. 73 func VerifyOptionQLen(t *testing.T, f func() (mangos.Socket, error), option string) { 74 s, err := f() 75 MustSucceed(t, err) 76 val, err := s.GetOption(option) 77 MustSucceed(t, err) 78 MustBeTrue(t, reflect.TypeOf(val) == reflect.TypeOf(1)) 79 80 MustSucceed(t, s.SetOption(option, 2)) 81 val, err = s.GetOption(option) 82 MustSucceed(t, err) 83 MustBeTrue(t, val.(int) == 2) 84 85 // Queue lengths are not permitted to be negative. 86 MustBeError(t, s.SetOption(option, -1), mangos.ErrBadValue) 87 88 MustBeError(t, s.SetOption(option, time.Now()), mangos.ErrBadValue) 89 MustBeError(t, s.SetOption(option, "junk"), mangos.ErrBadValue) 90 MustSucceed(t, s.Close()) 91 } 92 93 // VerifyOptionBool validates bool options. 94 func VerifyOptionBool(t *testing.T, f func() (mangos.Socket, error), option string) { 95 s, err := f() 96 MustSucceed(t, err) 97 val, err := s.GetOption(option) 98 MustSucceed(t, err) 99 MustBeTrue(t, reflect.TypeOf(val) == reflect.TypeOf(true)) 100 101 MustSucceed(t, s.SetOption(option, true)) 102 val, err = s.GetOption(option) 103 MustSucceed(t, err) 104 MustBeTrue(t, val.(bool)) 105 106 MustSucceed(t, s.SetOption(option, false)) 107 val, err = s.GetOption(option) 108 MustSucceed(t, err) 109 MustBeFalse(t, val.(bool)) 110 111 MustBeError(t, s.SetOption(option, time.Now()), mangos.ErrBadValue) 112 MustBeError(t, s.SetOption(option, "junk"), mangos.ErrBadValue) 113 MustSucceed(t, s.Close()) 114 } 115 116 // VerifyOptionTTL validates OptionTTL. 117 func VerifyOptionTTL(t *testing.T, f func() (mangos.Socket, error)) { 118 VerifyOptionInt(t, f, mangos.OptionTTL) 119 SetTTLZero(t, f) 120 SetTTLNegative(t, f) 121 SetTTLTooBig(t, f) 122 SetTTL(t, f) 123 } 124 125 // VerifyOptionMaxRecvSize validates OptionMaxRecvSize. 126 func VerifyOptionMaxRecvSize(t *testing.T, f func() (mangos.Socket, error)) { 127 VerifyOptionInt(t, f, mangos.OptionMaxRecvSize) 128 // Max Receive size must not be negative. 129 s := GetSocket(t, f) 130 MustBeError(t, s.SetOption(mangos.OptionMaxRecvSize, -1), mangos.ErrBadValue) 131 // Can set it to zero. 132 MustSucceed(t, s.SetOption(mangos.OptionMaxRecvSize, 0)) 133 // Can set it to some other values 134 MustSucceed(t, s.SetOption(mangos.OptionMaxRecvSize, 1024)) 135 }