Nothing
#' Tests for HashCounter class
test_that("HashCounter: structure", {
expect_s3_class(HashCounter, "R6ClassGenerator")
x <- HashCounter$new()
expect_s3_class(x, "HashCounter")
expect_type(x$clone, "closure")
expect_type(x$get, "closure")
expect_type(x$put, "closure")
expect_type(x$hash, "list")
expect_length(x$hash, 0) # New instance has empty hash
})
test_that("HashCounter: initialization", {
# Test initial state
x <- HashCounter$new()
expect_identical(x$hash, list())
# Test that clone creates a proper duplicate
y <- x$clone()
expect_s3_class(y, "HashCounter")
expect_identical(y$hash, x$hash)
# Ensure they are independent objects
a <- RequestSignature$new(method = "get", uri = hb("/get"))
x$put(a)
expect_length(x$hash, 1)
expect_length(y$hash, 0)
})
test_that("HashCounter: works as expected with basic operations", {
x <- HashCounter$new()
a <- RequestSignature$new(method = "get", uri = hb("/get"))
b <- RequestSignature$new(method = "post", uri = "https://www.wikipedia.org/")
# First put
x$put(a)
expect_length(x$hash, 1)
expect_equal(x$hash[[a$to_s()]]$count, 1)
expect_equal(x$get(a), 1)
# Second put of same request - counter should increment
x$put(a)
expect_length(x$hash, 1)
expect_equal(x$hash[[a$to_s()]]$count, 2)
expect_equal(x$get(a), 2)
# Put different request
x$put(b)
expect_length(x$hash, 2)
expect_equal(x$hash[[b$to_s()]]$count, 1)
expect_equal(x$get(b), 1)
# Multiple puts of second request
x$put(b)
x$put(b)
expect_length(x$hash, 2)
expect_equal(x$hash[[b$to_s()]]$count, 3)
expect_equal(x$get(b), 3)
# Original request count should still be 2
expect_equal(x$get(a), 2)
})
test_that("HashCounter: get returns 0 for non-existing requests", {
x <- HashCounter$new()
a <- RequestSignature$new(method = "get", uri = hb("/get"))
b <- RequestSignature$new(method = "post", uri = "https://www.wikipedia.org/")
# Put one request
x$put(a)
expect_equal(x$get(a), 1)
# Get count for non-existing request
expect_equal(x$get(b), 0)
})
test_that("HashCounter: stores unique requests by signature", {
x <- HashCounter$new()
# These have different signatures
a1 <- RequestSignature$new(method = "get", uri = hb("/get"))
a2 <- RequestSignature$new(method = "get", uri = hb("/get?foo=bar"))
a3 <- RequestSignature$new(method = "post", uri = hb("/get"))
# Put all requests
x$put(a1)
x$put(a2)
x$put(a3)
# Each should have its own entry
expect_length(x$hash, 3)
expect_equal(x$get(a1), 1)
expect_equal(x$get(a2), 1)
expect_equal(x$get(a3), 1)
# Getting one more time shouldn't change anything
expect_equal(x$get(a1), 1)
expect_length(x$hash, 3)
})
test_that("HashCounter: internal hash structure is correct", {
x <- HashCounter$new()
a <- RequestSignature$new(method = "get", uri = hb("/get"))
x$put(a)
# Check the internal hash structure
key <- a$to_s()
expect_true(key %in% names(x$hash))
expect_type(x$hash[[key]], "list")
expect_named(x$hash[[key]], c("key", "sig", "count"))
expect_equal(x$hash[[key]]$key, key)
expect_s3_class(x$hash[[key]]$sig, "RequestSignature")
expect_equal(x$hash[[key]]$count, 1)
})
test_that("HashCounter fails well", {
x <- HashCounter$new()
# Missing arguments
expect_error(x$get(), '\"req_sig\" is missing')
expect_error(x$put(), '\"req_sig\" is missing')
# Wrong argument types
expect_error(
x$get("not a request signature"),
"must be of class RequestSignature"
)
expect_error(x$put(list()), "must be of class RequestSignature")
expect_error(x$put(42), "must be of class RequestSignature")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.