c787bb5b48
In particular, add a failing test for the case where ETag changes but Last-Modified does not.
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package fetcher // import "miniflux.app/v2/internal/reader/fetcher"
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
func TestIsModified(t *testing.T) {
|
|
var cachedEtag = "abc123"
|
|
var cachedLastModified = "Wed, 21 Oct 2015 07:28:00 GMT"
|
|
|
|
var testCases = map[string]struct {
|
|
Status int
|
|
LastModified string
|
|
ETag string
|
|
IsModified bool
|
|
}{
|
|
"Unmodified 304": {
|
|
Status: 304,
|
|
LastModified: cachedLastModified,
|
|
ETag: cachedEtag,
|
|
IsModified: false,
|
|
},
|
|
"Unmodified 200": {
|
|
Status: 200,
|
|
LastModified: cachedLastModified,
|
|
ETag: cachedEtag,
|
|
IsModified: false,
|
|
},
|
|
// This case is invalid per RFC9110 8.8.1, so ETag takes precedence.
|
|
"Last-Modified changed only": {
|
|
Status: 200,
|
|
LastModified: "Thu, 22 Oct 2015 07:28:00 GMT",
|
|
ETag: cachedEtag,
|
|
IsModified: false,
|
|
},
|
|
"ETag changed only": {
|
|
Status: 200,
|
|
LastModified: cachedLastModified,
|
|
ETag: "xyz789",
|
|
IsModified: true,
|
|
},
|
|
"ETag and Last-Modified changed": {
|
|
Status: 200,
|
|
LastModified: "Thu, 22 Oct 2015 07:28:00 GMT",
|
|
ETag: "xyz789",
|
|
IsModified: true,
|
|
},
|
|
}
|
|
for name, tc := range testCases {
|
|
t.Run(name, func(tt *testing.T) {
|
|
header := http.Header{}
|
|
header.Add("Last-Modified", tc.LastModified)
|
|
header.Add("ETag", tc.ETag)
|
|
rh := ResponseHandler{
|
|
httpResponse: &http.Response{
|
|
StatusCode: tc.Status,
|
|
Header: header,
|
|
},
|
|
}
|
|
if tc.IsModified != rh.IsModified(cachedEtag, cachedLastModified) {
|
|
tt.Error(name)
|
|
}
|
|
})
|
|
}
|
|
}
|