diff --git a/configs/dictionaries/essixpointseven_percentages.yaml b/configs/dictionaries/essixpointseven_percentages.yaml index 2b693c1..3fa6144 100644 --- a/configs/dictionaries/essixpointseven_percentages.yaml +++ b/configs/dictionaries/essixpointseven_percentages.yaml @@ -1,4 +1,3 @@ --- -A: 1 -B: 1 -Z: 98 \ No newline at end of file +A: 50 +B: 50 diff --git a/spec/test-outputs/www-eks-integration.out.vcl b/spec/test-outputs/www-eks-integration.out.vcl index c776944..7e811ae 100644 --- a/spec/test-outputs/www-eks-integration.out.vcl +++ b/spec/test-outputs/www-eks-integration.out.vcl @@ -236,6 +236,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -397,6 +442,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-eks-production.out.vcl b/spec/test-outputs/www-eks-production.out.vcl index 60a7fe3..6662b53 100644 --- a/spec/test-outputs/www-eks-production.out.vcl +++ b/spec/test-outputs/www-eks-production.out.vcl @@ -408,6 +408,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -569,6 +614,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-eks-staging.out.vcl b/spec/test-outputs/www-eks-staging.out.vcl index 60a7fe3..6662b53 100644 --- a/spec/test-outputs/www-eks-staging.out.vcl +++ b/spec/test-outputs/www-eks-staging.out.vcl @@ -408,6 +408,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -569,6 +614,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-eks-test.out.vcl b/spec/test-outputs/www-eks-test.out.vcl index c776944..7e811ae 100644 --- a/spec/test-outputs/www-eks-test.out.vcl +++ b/spec/test-outputs/www-eks-test.out.vcl @@ -236,6 +236,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -397,6 +442,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-integration.out.vcl b/spec/test-outputs/www-integration.out.vcl index c776944..7e811ae 100644 --- a/spec/test-outputs/www-integration.out.vcl +++ b/spec/test-outputs/www-integration.out.vcl @@ -236,6 +236,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -397,6 +442,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-production.out.vcl b/spec/test-outputs/www-production.out.vcl index 21491be..2aa845e 100644 --- a/spec/test-outputs/www-production.out.vcl +++ b/spec/test-outputs/www-production.out.vcl @@ -400,6 +400,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -561,6 +606,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-staging.out.vcl b/spec/test-outputs/www-staging.out.vcl index 60a7fe3..6662b53 100644 --- a/spec/test-outputs/www-staging.out.vcl +++ b/spec/test-outputs/www-staging.out.vcl @@ -408,6 +408,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -569,6 +614,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section diff --git a/spec/test-outputs/www-test.out.vcl b/spec/test-outputs/www-test.out.vcl index c776944..7e811ae 100644 --- a/spec/test-outputs/www-test.out.vcl +++ b/spec/test-outputs/www-test.out.vcl @@ -236,6 +236,51 @@ sub vcl_recv { } } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.User-Agent ~ "^GOV\.UK Crawler Worker") { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=A(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=B(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else if (req.url ~ "[\?\&]ABTest-EsSixPointSeven=Z(&|$)") { + # Some users, such as remote testers, will be given a URL with a query string + # to place them into a specific bucket. + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } else if (req.http.Cookie ~ "ABTest-EsSixPointSeven") { + # Set the value of the header to whatever decision was previously made + set req.http.GOVUK-ABTest-EsSixPointSeven = req.http.Cookie:ABTest-EsSixPointSeven; + set req.http.GOVUK-ABTest-EsSixPointSeven-Cookie = "sent_in_request"; + } else { + declare local var.denominator_EsSixPointSeven INTEGER; + declare local var.denominator_EsSixPointSeven_A INTEGER; + declare local var.nominator_EsSixPointSeven_A INTEGER; + set var.nominator_EsSixPointSeven_A = std.atoi(table.lookup(essixpointseven_percentages, "A")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_A; + declare local var.denominator_EsSixPointSeven_B INTEGER; + declare local var.nominator_EsSixPointSeven_B INTEGER; + set var.nominator_EsSixPointSeven_B = std.atoi(table.lookup(essixpointseven_percentages, "B")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_B; + declare local var.denominator_EsSixPointSeven_Z INTEGER; + declare local var.nominator_EsSixPointSeven_Z INTEGER; + set var.nominator_EsSixPointSeven_Z = std.atoi(table.lookup(essixpointseven_percentages, "Z")); + set var.denominator_EsSixPointSeven += var.nominator_EsSixPointSeven_Z; + set var.denominator_EsSixPointSeven_A = var.denominator_EsSixPointSeven; + set var.denominator_EsSixPointSeven_B = var.denominator_EsSixPointSeven_A; + set var.denominator_EsSixPointSeven_B -= var.nominator_EsSixPointSeven_A; + if (randombool(var.nominator_EsSixPointSeven_A, var.denominator_EsSixPointSeven_A)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "A"; + } else if (randombool(var.nominator_EsSixPointSeven_B, var.denominator_EsSixPointSeven_B)) { + set req.http.GOVUK-ABTest-EsSixPointSeven = "B"; + } else { + set req.http.GOVUK-ABTest-EsSixPointSeven = "Z"; + } + } + } } # End dynamic section @@ -397,6 +442,12 @@ if (req.http.Usage-Cookies-Opt-In == "true" && req.http.User-Agent !~ "^GOV\.UK add resp.http.Set-Cookie = "ABTest-BankHolidaysTest=" req.http.GOVUK-ABTest-BankHolidaysTest "; secure; expires=" var.expiry "; path=/"; } } + if (table.lookup(active_ab_tests, "EsSixPointSeven") == "true") { + if (req.http.GOVUK-ABTest-EsSixPointSeven-Cookie != "sent_in_request" || req.url ~ "[\?\&]ABTest-EsSixPointSeven") { + set var.expiry = time.add(now, std.integer2time(std.atoi(table.lookup(ab_test_expiries, "EsSixPointSeven")))); + add resp.http.Set-Cookie = "ABTest-EsSixPointSeven=" req.http.GOVUK-ABTest-EsSixPointSeven "; secure; expires=" var.expiry "; path=/"; + } + } } # End dynamic section