forked from quic-go/quic-go
make it possible to configure the QUIC versions for the client
This commit is contained in:
@@ -8,8 +8,8 @@ const (
|
||||
Version35 VersionNumber = 35 + iota
|
||||
Version36
|
||||
Version37
|
||||
VersionWhatever = 0 // for when the version doesn't matter
|
||||
VersionUnsupported = -1
|
||||
VersionWhatever VersionNumber = 0 // for when the version doesn't matter
|
||||
VersionUnsupported VersionNumber = -1
|
||||
)
|
||||
|
||||
// SupportedVersions lists the versions that the server supports
|
||||
@@ -40,16 +40,14 @@ func IsSupportedVersion(supported []VersionNumber, v VersionNumber) bool {
|
||||
}
|
||||
|
||||
// HighestSupportedVersion finds the highest version number that is both present in other and in SupportedVersions
|
||||
// the versions in other do not need to be ordered
|
||||
// it returns true and the version number, if there is one, otherwise false
|
||||
func HighestSupportedVersion(other []VersionNumber) (bool, VersionNumber) {
|
||||
for _, v := range SupportedVersions {
|
||||
for _, ver := range other {
|
||||
if ver == v {
|
||||
return true, ver
|
||||
func HighestSupportedVersion(ours, theirs []VersionNumber) (bool, VersionNumber) {
|
||||
for _, ourVer := range ours {
|
||||
for _, theirVer := range theirs {
|
||||
if ourVer == theirVer {
|
||||
return true, ourVer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false, 0
|
||||
return false, VersionUnsupported
|
||||
}
|
||||
|
||||
@@ -27,39 +27,33 @@ var _ = Describe("Version", func() {
|
||||
})
|
||||
|
||||
Context("highest supported version", func() {
|
||||
var initialSupportedVersions []VersionNumber
|
||||
|
||||
BeforeEach(func() {
|
||||
initialSupportedVersions = make([]VersionNumber, len(SupportedVersions))
|
||||
copy(initialSupportedVersions, SupportedVersions)
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
SupportedVersions = initialSupportedVersions
|
||||
})
|
||||
|
||||
It("finds the supported version", func() {
|
||||
SupportedVersions = []VersionNumber{3, 2, 1}
|
||||
other := []VersionNumber{3, 4, 5, 6}
|
||||
found, ver := HighestSupportedVersion(other)
|
||||
supportedVersions := []VersionNumber{1, 2, 3}
|
||||
other := []VersionNumber{6, 5, 4, 3}
|
||||
found, ver := HighestSupportedVersion(supportedVersions, other)
|
||||
Expect(found).To(BeTrue())
|
||||
Expect(ver).To(Equal(VersionNumber(3)))
|
||||
})
|
||||
|
||||
It("picks the highest supported version", func() {
|
||||
SupportedVersions = []VersionNumber{7, 6, 3, 2, 1}
|
||||
It("picks the preferred version", func() {
|
||||
supportedVersions := []VersionNumber{2, 1, 3}
|
||||
other := []VersionNumber{3, 6, 1, 8, 2, 10}
|
||||
found, ver := HighestSupportedVersion(other)
|
||||
found, ver := HighestSupportedVersion(supportedVersions, other)
|
||||
Expect(found).To(BeTrue())
|
||||
Expect(ver).To(Equal(VersionNumber(6)))
|
||||
Expect(ver).To(Equal(VersionNumber(2)))
|
||||
})
|
||||
|
||||
It("handles empty inputs", func() {
|
||||
SupportedVersions = []VersionNumber{102, 101}
|
||||
Expect(HighestSupportedVersion([]VersionNumber{})).To(BeFalse())
|
||||
SupportedVersions = []VersionNumber{}
|
||||
Expect(HighestSupportedVersion([]VersionNumber{1, 2})).To(BeFalse())
|
||||
Expect(HighestSupportedVersion([]VersionNumber{})).To(BeFalse())
|
||||
supportedVersions := []VersionNumber{102, 101}
|
||||
found, _ := HighestSupportedVersion(supportedVersions, nil)
|
||||
Expect(found).To(BeFalse())
|
||||
found, _ = HighestSupportedVersion(supportedVersions, []VersionNumber{})
|
||||
Expect(found).To(BeFalse())
|
||||
supportedVersions = []VersionNumber{}
|
||||
found, _ = HighestSupportedVersion(supportedVersions, []VersionNumber{1, 2})
|
||||
Expect(found).To(BeFalse())
|
||||
found, _ = HighestSupportedVersion(supportedVersions, []VersionNumber{})
|
||||
Expect(found).To(BeFalse())
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user