Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: make sure LTE and v0.4 emit the same test keys #1392

Merged
merged 119 commits into from
Dec 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
766d4d0
chore: start investigating LTE vs v0.4
bassosimone Nov 22, 2023
f3701a0
document why some QA tests with redirects are broken
bassosimone Nov 23, 2023
f1cc4bb
document more doubts about emmitting events
bassosimone Nov 23, 2023
0b2203d
document more caveats
bassosimone Nov 23, 2023
8eb1ba1
[ci skip] remember to update files in sync
bassosimone Nov 23, 2023
92eb7b7
doc: document more doubts that I have
bassosimone Nov 23, 2023
ea0d3bf
[ci skip] more documentation on what to do
bassosimone Nov 23, 2023
fd06406
feat: progress towards fixing some fundamental issues
bassosimone Nov 23, 2023
ad75714
resolve one more test case
bassosimone Nov 23, 2023
d6cbfd9
more fixes
bassosimone Nov 23, 2023
41fbd3f
doc: explain issues caused by adding HTTP response
bassosimone Nov 23, 2023
e5e4c37
try to sketch out an ooni/data-inspired pipeline
bassosimone Nov 23, 2023
6aff4f0
convert more of v0.5's analysis to the ooni/data-like style
bassosimone Nov 24, 2023
94f9fd7
some more progress
bassosimone Nov 24, 2023
ff42f3c
break the code in a different way
bassosimone Nov 24, 2023
5ad88d5
feat: rewrite the pipeline to match ooni/data more closely
bassosimone Nov 24, 2023
132ba4d
also implement the analysis
bassosimone Nov 24, 2023
be18947
work
bassosimone Nov 24, 2023
18da855
we're mostly done in terms of passing the existing QA tests
bassosimone Nov 25, 2023
e7764c8
tests now green
bassosimone Nov 25, 2023
dac4170
make more test cases work with LTE
bassosimone Nov 26, 2023
258d7fb
we now pass all tests
bassosimone Nov 27, 2023
c6a49ff
[ci skip] remove TODO
bassosimone Nov 27, 2023
8d25a65
fix tricky case with order of DNS processing
bassosimone Nov 27, 2023
44541ea
adjust test case where actually dns is consistent with lte
bassosimone Nov 27, 2023
183f524
make all lte tests pass consistently
bassosimone Nov 27, 2023
a4bedcc
x
bassosimone Nov 27, 2023
3ded283
start generating test cases for the minipipeline
bassosimone Nov 27, 2023
1eaaac0
start adding tests for the minipipeline
bassosimone Nov 27, 2023
df33632
add tests for the minipipeline command
bassosimone Nov 27, 2023
5ad8387
more testing
bassosimone Nov 27, 2023
9fc77fc
more minipipeline tests
bassosimone Nov 27, 2023
c7c310a
x
bassosimone Nov 27, 2023
281e38d
x
bassosimone Nov 27, 2023
0ea4803
add more test cases
bassosimone Nov 27, 2023
9ec20fc
x
bassosimone Nov 27, 2023
66364ed
x
bassosimone Nov 27, 2023
329b2c8
x
bassosimone Nov 27, 2023
72b2be9
x
bassosimone Nov 27, 2023
7f8c143
start documenting code and existing bugs
bassosimone Nov 27, 2023
14840ac
attempt to fix the model problems
bassosimone Nov 27, 2023
55c05ac
commit the measurements
bassosimone Nov 27, 2023
c45a2f6
okay, this looks relatively good
bassosimone Nov 27, 2023
28f93aa
other changes
bassosimone Nov 27, 2023
d849894
x
bassosimone Nov 27, 2023
5091608
add measurements
bassosimone Nov 27, 2023
f1d7137
x
bassosimone Nov 27, 2023
c228c4e
add measurements
bassosimone Nov 27, 2023
8d668fe
x
bassosimone Nov 27, 2023
29bfdd4
x
bassosimone Nov 27, 2023
310ab28
x
bassosimone Nov 27, 2023
dfdf673
meas
bassosimone Nov 27, 2023
9110384
meas
bassosimone Nov 27, 2023
1a8c235
obs
bassosimone Nov 27, 2023
29fec45
x
bassosimone Nov 27, 2023
05f8838
Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
b6c643f
x
bassosimone Nov 28, 2023
cc60691
Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
0956494
fix potential bug with failed DNS lookups
bassosimone Nov 28, 2023
fae9155
Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
0c6d012
x
bassosimone Nov 28, 2023
0b3a979
Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
7a6f00b
Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
1040d73
simplify
bassosimone Nov 28, 2023
cfe7643
x
bassosimone Nov 28, 2023
9138fb6
x
bassosimone Nov 28, 2023
a6cf23b
[ci skip] Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
5b7aa00
Butcher lte and make sure tests are aligned with v0.4
bassosimone Nov 28, 2023
4331276
we need to trust everything that v0.4 emits
bassosimone Nov 28, 2023
383eb69
x
bassosimone Nov 28, 2023
1488d05
Merge branch 'master' into issue/2634
bassosimone Nov 28, 2023
4217859
x
bassosimone Nov 28, 2023
99d5e1e
add classic filter
bassosimone Nov 28, 2023
6eeb352
[ci skip]
bassosimone Nov 28, 2023
7d5bed9
x
bassosimone Nov 28, 2023
e1f87b1
x
bassosimone Nov 28, 2023
f7f5c3e
x
bassosimone Nov 28, 2023
90457e9
Merge branch 'master' into issue/2634
bassosimone Nov 29, 2023
b83ec13
Merge branch 'master' into issue/2634
bassosimone Nov 29, 2023
cb2a89d
x
bassosimone Nov 29, 2023
dd28dd4
x
bassosimone Nov 29, 2023
fa605cf
x
bassosimone Nov 29, 2023
99fecb3
rewrite analysis
bassosimone Nov 29, 2023
37320b3
x
bassosimone Nov 29, 2023
ec9f57c
[ci skip] Merge branch 'master' into issue/2634
bassosimone Nov 29, 2023
b13693e
x
bassosimone Nov 29, 2023
f25c811
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
b62b6a2
x
bassosimone Nov 30, 2023
c4f8916
x
bassosimone Nov 30, 2023
6711640
x
bassosimone Nov 30, 2023
2498a31
xx
bassosimone Nov 30, 2023
6186f67
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
e312857
x
bassosimone Nov 30, 2023
6f620fc
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
f9e3e29
x
bassosimone Nov 30, 2023
56f1659
x
bassosimone Nov 30, 2023
1b9355e
x
bassosimone Nov 30, 2023
280d5f3
x
bassosimone Nov 30, 2023
eca31f0
x
bassosimone Nov 30, 2023
041186c
x
bassosimone Nov 30, 2023
7eda6aa
x
bassosimone Nov 30, 2023
22cc17c
x
bassosimone Nov 30, 2023
61522d3
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
601e4d3
x
bassosimone Nov 30, 2023
f4c9643
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
8bd14be
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
3c92520
x
bassosimone Nov 30, 2023
fd5ea63
x
bassosimone Nov 30, 2023
39723b8
[ci skip]
bassosimone Nov 30, 2023
64b43f0
x
bassosimone Nov 30, 2023
d5f0639
Merge branch 'master' into issue/2634
bassosimone Nov 30, 2023
b8b0822
[ci skip]
bassosimone Nov 30, 2023
be3328f
[ci skip]
bassosimone Nov 30, 2023
217dfe6
[ci skip]
bassosimone Nov 30, 2023
bbb9525
[ci skip]
bassosimone Nov 30, 2023
c8fc6c0
[ci skip]
bassosimone Dec 1, 2023
c6c5214
x
bassosimone Dec 1, 2023
fa448ee
x
bassosimone Dec 1, 2023
026f46e
x
bassosimone Dec 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 45 additions & 5 deletions internal/experiment/webconnectivitylte/analysisclassic.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,16 @@ func (tk *TestKeys) analysisClassic(logger model.Logger) {
// 4. determine the DNS consistency
tk.DNSConsistency = analysisClassicDNSConsistency(woa)

// 5. compute the HTTPDiff values
// 5. set DNSExperimentFailure
if !woa.DNSExperimentFailure.IsNone() && woa.DNSExperimentFailure.Unwrap() != "" {
value := woa.DNSExperimentFailure.Unwrap()
tk.DNSExperimentFailure = &value
}

// 6. compute the HTTPDiff values
tk.setHTTPDiffValues(woa)

// 6. compute blocking & accessible
// 7. compute blocking & accessible
analysisClassicComputeBlockingAccessible(woa, tk)
}

Expand All @@ -68,7 +74,8 @@ func analysisClassicDNSConsistency(woa *minipipeline.WebAnalysis) optional.Value
func (tk *TestKeys) setHTTPDiffValues(woa *minipipeline.WebAnalysis) {
const bodyProportionFactor = 0.7
if !woa.HTTPFinalResponseDiffBodyProportionFactor.IsNone() {
value := woa.HTTPFinalResponseDiffBodyProportionFactor.Unwrap() > bodyProportionFactor
tk.BodyProportion = woa.HTTPFinalResponseDiffBodyProportionFactor.Unwrap()
value := tk.BodyProportion > bodyProportionFactor
tk.BodyLengthMatch = &value
}

Expand All @@ -89,6 +96,9 @@ func (tk *TestKeys) setHTTPDiffValues(woa *minipipeline.WebAnalysis) {
}

type analysisClassicTestKeysProxy interface {
// httpDiff returns true if there's an http-diff.
httpDiff() bool

// setBlockingString sets blocking to a string.
setBlockingString(value string)

Expand All @@ -98,8 +108,8 @@ type analysisClassicTestKeysProxy interface {
// setBlockingFalse sets Blocking to false.
setBlockingFalse()

// httpDiff returns true if there's an http-diff.
httpDiff() bool
// setHTTPExperimentFailure sets the HTTPExperimentFailure field.
setHTTPExperimentFailure(value optional.Value[string])
}

var _ analysisClassicTestKeysProxy = &TestKeys{}
Expand Down Expand Up @@ -148,6 +158,11 @@ func (tk *TestKeys) setBlockingString(value string) {
tk.Accessible = false
}

// setHTTPExperimentFailure implements analysisClassicTestKeysProxy.
func (tk *TestKeys) setHTTPExperimentFailure(value optional.Value[string]) {
tk.HTTPExperimentFailure = value
}

func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk analysisClassicTestKeysProxy) {
// minipipeline.NewLinearWebAnalysis produces a woa.Linear sorted
//
Expand Down Expand Up @@ -217,6 +232,7 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// the control server is unreachable or blocked.
if entry.ControlHTTPFailure.IsNone() {
tk.setBlockingNil()
tk.setHTTPExperimentFailure(entry.Failure)
return
}

Expand All @@ -226,11 +242,13 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// should also set Accessible to false. However, v0.4
// does this and we should play along for the A/B testing.
tk.setBlockingFalse()
tk.setHTTPExperimentFailure(entry.Failure)
return
}

// 2.3. Handle the case where just the probe failed.
tk.setBlockingString("http-failure")
tk.setHTTPExperimentFailure(entry.Failure)
return
}

Expand All @@ -248,11 +266,13 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// the control accessing the website and telling us.
if entry.ControlHTTPFailure.IsNone() {
tk.setBlockingNil()
tk.setHTTPExperimentFailure(entry.Failure)
return
}

// 3.1.2. Otherwise, if the control worked, that's blocking.
tk.setBlockingString("http-failure")
tk.setHTTPExperimentFailure(entry.Failure)
return
}

Expand All @@ -262,11 +282,13 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// should set Accessible and Blocking to false. However, v0.4
// does this and we should play along for the A/B testing.
tk.setBlockingNil()
tk.setHTTPExperimentFailure(entry.Failure)
return
}

// 3.3. Handle the case where just the probe failed.
tk.setBlockingString("http-failure")
tk.setHTTPExperimentFailure(entry.Failure)
return
}

Expand All @@ -281,11 +303,13 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// accessing the website should lead to.
if entry.ControlHTTPFailure.IsNone() {
tk.setBlockingNil()
tk.setHTTPExperimentFailure(entry.Failure)
return
}

// 4.1.2. Otherwise, if the control worked, that's blocking.
tk.setBlockingString("http-failure")
tk.setHTTPExperimentFailure(entry.Failure)
return
}

Expand All @@ -295,11 +319,13 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// should set Accessible and Blocking to false. However, v0.4
// does this and we should play along for the A/B testing.
tk.setBlockingFalse()
tk.setHTTPExperimentFailure(entry.Failure)
return
}

// 4.3. Handle the case where just the probe failed.
tk.setBlockingString("tcp_ip")
tk.setHTTPExperimentFailure(entry.Failure)
return
}

Expand All @@ -314,11 +340,13 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// accessing the website should lead to.
if entry.ControlHTTPFailure.IsNone() {
tk.setBlockingFalse()
analysisClassicSetHTTPExperimentFailureDNS(tk, entry)
return
}

// 5.1.2. Otherwise, if the control worked, that's blocking.
tk.setBlockingString("dns")
analysisClassicSetHTTPExperimentFailureDNS(tk, entry)
return
}

Expand All @@ -328,12 +356,24 @@ func analysisClassicComputeBlockingAccessible(woa *minipipeline.WebAnalysis, tk
// should set Accessible and Blocking to false. However, v0.4
// does this and we should play along for the A/B testing.
tk.setBlockingFalse()
analysisClassicSetHTTPExperimentFailureDNS(tk, entry)
return
}

// 5.3. Handle the case where just the probe failed.
tk.setBlockingString("dns")
analysisClassicSetHTTPExperimentFailureDNS(tk, entry)
return
}
}
}

// analysisClassicSetHTTPExperimentFailureDNS sets the HTTPExperimentFailure if and
// only if the entry's TagDepth is >= 1. We have a v0.4 bug where we do not properly
// set this value for the first HTTP request <facepalm>.
func analysisClassicSetHTTPExperimentFailureDNS(tk analysisClassicTestKeysProxy, entry *minipipeline.WebObservation) {
if entry.TagDepth.UnwrapOr(0) <= 0 {
return
}
tk.setHTTPExperimentFailure(entry.Failure)
}
2 changes: 1 addition & 1 deletion internal/experiment/webconnectivitylte/analysiscore.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ const (

// AnalysisEngineFn is the function that runs the analysis engine for
// processing and scoring measurements collected by LTE.
var AnalysisEngineFn func(tk *TestKeys, logger model.Logger) = AnalysisEngineOrig
var AnalysisEngineFn func(tk *TestKeys, logger model.Logger) = AnalysisEngineClassic

// analysisToplevel is the toplevel function that analyses the results
// of the experiment once all network tasks have completed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package webconnectivitylte
import (
"github.com/ooni/probe-cli/v3/internal/model"
"github.com/ooni/probe-cli/v3/internal/netxlite"
"github.com/ooni/probe-cli/v3/internal/optional"
)

// analysisHTTPToplevel is the toplevel analysis function for HTTP results.
Expand All @@ -31,7 +32,9 @@ func (tk *TestKeys) analysisHTTPToplevel(logger model.Logger) {
return
}
finalRequest := tk.Requests[0]
tk.HTTPExperimentFailure = finalRequest.Failure
if finalRequest.Failure != nil {
tk.HTTPExperimentFailure = optional.Some(*finalRequest.Failure)
}

// don't perform any futher analysis without TH data
if tk.Control == nil || tk.ControlRequest == nil {
Expand Down
2 changes: 1 addition & 1 deletion internal/experiment/webconnectivitylte/measurer.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func (m *Measurer) ExperimentName() string {

// ExperimentVersion implements model.ExperimentMeasurer.
func (m *Measurer) ExperimentVersion() string {
return "0.5.26"
return "0.5.27"
}

// Run implements model.ExperimentMeasurer.
Expand Down
8 changes: 6 additions & 2 deletions internal/experiment/webconnectivitylte/testkeys.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ type TestKeys struct {

// HTTPExperimentFailure indicates whether there was a failure in
// the final HTTP request that we recorded.
HTTPExperimentFailure *string `json:"http_experiment_failure"`
HTTPExperimentFailure optional.Value[string] `json:"http_experiment_failure"`

// BlockingFlags explains why we think that the website is blocked.
BlockingFlags int64 `json:"x_blocking_flags"`
Expand All @@ -95,6 +95,9 @@ type TestKeys struct {
// blocking = null, accessible = null measurements did
NullNullFlags int64 `json:"x_null_null_flags"`

// BodyProportion is the value used to compute BodyLength.
BodyProportion float64 `json:"body_proportion"`

// BodyLength match tells us whether the body length matches.
BodyLengthMatch *bool `json:"body_length_match"`

Expand Down Expand Up @@ -356,9 +359,10 @@ func NewTestKeys() *TestKeys {
DNSFlags: 0,
DNSExperimentFailure: nil,
DNSConsistency: optional.None[string](),
HTTPExperimentFailure: nil,
HTTPExperimentFailure: optional.None[string](),
BlockingFlags: 0,
NullNullFlags: 0,
BodyProportion: 0,
BodyLengthMatch: nil,
HeadersMatch: nil,
StatusCodeMatch: nil,
Expand Down
8 changes: 4 additions & 4 deletions internal/experiment/webconnectivityqa/badssl.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
func badSSLWithExpiredCertificate() *TestCase {
return &TestCase{
Name: "badSSLWithExpiredCertificate",
Flags: TestCaseFlagNoLTE, // LTE flags it correctly but let's focus on v0.4 for now
Flags: 0,
Input: "https://expired.badssl.com/",
Configure: func(env *netemx.QAEnv) {
// nothing
Expand All @@ -32,7 +32,7 @@ func badSSLWithExpiredCertificate() *TestCase {
func badSSLWithWrongServerName() *TestCase {
return &TestCase{
Name: "badSSLWithWrongServerName",
Flags: TestCaseFlagNoLTE, // LTE flags it correctly but let's focus on v0.4 for now
Flags: 0,
Input: "https://wrong.host.badssl.com/",
Configure: func(env *netemx.QAEnv) {
// nothing
Expand All @@ -53,7 +53,7 @@ func badSSLWithWrongServerName() *TestCase {
func badSSLWithUnknownAuthorityWithConsistentDNS() *TestCase {
return &TestCase{
Name: "badSSLWithUnknownAuthorityWithConsistentDNS",
Flags: TestCaseFlagNoLTE, // LTE flags it correctly but let's focus on v0.4 for now
Flags: 0,
Input: "https://untrusted-root.badssl.com/",
Configure: func(env *netemx.QAEnv) {
// nothing
Expand All @@ -79,7 +79,7 @@ func badSSLWithUnknownAuthorityWithInconsistentDNS() *TestCase {
Configure: func(env *netemx.QAEnv) {

// add DPI rule to force all the cleartext DNS queries to
// point the client to used the ISPProxyAddress
// point the client to use the ISPProxyAddress
env.DPIEngine().AddRule(&netem.DPISpoofDNSResponse{
Addresses: []string{netemx.AddressBadSSLCom},
Logger: env.Logger(),
Expand Down
4 changes: 2 additions & 2 deletions internal/experiment/webconnectivityqa/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
func controlFailureWithSuccessfulHTTPWebsite() *TestCase {
return &TestCase{
Name: "controlFailureWithSuccessfulHTTPWebsite",
Flags: TestCaseFlagNoLTE, // BUG: has "consistent" DNS but still blocking=null and accessible=null
Flags: 0,
Input: "http://www.example.org/",
Configure: func(env *netemx.QAEnv) {

Expand Down Expand Up @@ -56,7 +56,7 @@ func controlFailureWithSuccessfulHTTPWebsite() *TestCase {
func controlFailureWithSuccessfulHTTPSWebsite() *TestCase {
return &TestCase{
Name: "controlFailureWithSuccessfulHTTPSWebsite",
Flags: TestCaseFlagNoLTE, // because it (correctly!) sets the DNS as consistent thanks to TLS
Flags: 0,
Input: "https://www.example.org/",
Configure: func(env *netemx.QAEnv) {

Expand Down
5 changes: 2 additions & 3 deletions internal/experiment/webconnectivityqa/dnsblocking.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,7 @@ func dnsBlockingNXDOMAIN() *TestCase {
Flags: 0,
Input: "https://www.example.com/",
Configure: func(env *netemx.QAEnv) {
// remove the record so that the DNS query returns NXDOMAIN, which is then
// converted into android_dns_cache_no_data by the emulation layer
// remove the record so that the DNS query returns NXDOMAIN
env.ISPResolverConfig().RemoveRecord("www.example.com")
},
ExpectErr: false,
Expand All @@ -68,7 +67,7 @@ func dnsBlockingNXDOMAIN() *TestCase {
func dnsBlockingBOGON() *TestCase {
return &TestCase{
Name: "dnsBlockingBOGON",
Flags: TestCaseFlagNoLTE, // We're not ready yet
Flags: 0,
Input: "https://www.example.com/",
Configure: func(env *netemx.QAEnv) {
env.ISPResolverConfig().RemoveRecord("www.example.com")
Expand Down
4 changes: 2 additions & 2 deletions internal/experiment/webconnectivityqa/dnshijacking.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ func dnsHijackingToProxyWithHTTPURL() *TestCase {
// transparent TLS proxy really makes our analysis a bit more complex
return &TestCase{
Name: "dnsHijackingToProxyWithHTTPURL",
Flags: TestCaseFlagNoLTE, // BUG: LTE thinks the DNS is consistent
Flags: 0,
Input: "http://www.example.com/",
Configure: func(env *netemx.QAEnv) {

Expand Down Expand Up @@ -49,7 +49,7 @@ func dnsHijackingToProxyWithHTTPSURL() *TestCase {
// transparent TLS proxy really makes our analysis a bit more complex
return &TestCase{
Name: "dnsHijackingToProxyWithHTTPSURL",
Flags: TestCaseFlagNoLTE, // BUG: LTE thinks the DNS is consistent
Flags: 0,
Input: "https://www.example.com/",
Configure: func(env *netemx.QAEnv) {

Expand Down
6 changes: 3 additions & 3 deletions internal/experiment/webconnectivityqa/httpdiff.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
func httpDiffWithConsistentDNS() *TestCase {
return &TestCase{
Name: "httpDiffWithConsistentDNS",
Flags: TestCaseFlagNoLTE, // BUG: LTE does not set whether the headers match
Flags: 0,
Input: "http://www.example.com/",
Configure: func(env *netemx.QAEnv) {

Expand Down Expand Up @@ -49,12 +49,12 @@ func httpDiffWithConsistentDNS() *TestCase {
func httpDiffWithInconsistentDNS() *TestCase {
return &TestCase{
Name: "httpDiffWithInconsistentDNS",
Flags: TestCaseFlagNoLTE, // BUG: LTE does not detect any HTTP diff here
Flags: 0,
Input: "http://www.example.com/",
Configure: func(env *netemx.QAEnv) {

// add DPI rule to force all the cleartext DNS queries to
// point the client to used the ISPProxyAddress
// point the client to use the ISPProxyAddress
env.DPIEngine().AddRule(&netem.DPISpoofDNSResponse{
Addresses: []string{netemx.ISPProxyAddress},
Logger: env.Logger(),
Expand Down
Loading