Commit Graph

7 Commits

Author SHA1 Message Date
Aaron Schlesinger 8ebbabc763
swapping watch broadcaster channel behavior (#283)
* swapping watch broadcaster channel behavior

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* small test refactor

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* more comments in test

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* more comments and interface implementation check for fake deployment cache

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding comment to closeableWatcher

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* forgot the beginning of comment

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding error checking to the closeableWatcher

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing resultCalls from the closeable watcher

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing the closeableWatcher in favor of the fake watcher functionality in client-go

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* closeableWatcher => reopeningWatcher

The core functionality needed was automatic reopening of watch channels. This commit
implements that while removing some ancillary things like specifying whether
to reopen etc...

Signed-off-by: Aaron <aaron@ecomaz.net>

* fixing nil ptr exception

Signed-off-by: Aaron <aaron@ecomaz.net>

* clarifying comments

Signed-off-by: Aaron <aaron@ecomaz.net>
2021-10-25 12:38:47 -07:00
Aaron Schlesinger 41e86c124a
Follow-up tests for multi-tenant work (#279)
* add test for addEvt in deployment cache

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Adding TestRunProxyServerCountMiddleware

Currently failing :)

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding resize timeout to the queue fake

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* StartTestServer => NewTestServer

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* StartTestServer => NewTestServer

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Going back to StartTestServer

I forgot that it actually does start the test server in the background

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* using targetFromURL

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* more StartTestServer

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Keeping track of the running queue count in the fake

Also protecting that map with a mutex

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* finishing the interceptor test

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding test comment

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* more movement over to targetFromURL

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* additional checks

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>
2021-10-25 12:33:02 -07:00
Aaron Schlesinger 53b14e2d6c
Checking for deployment equality in deployment cache (#275)
* checking deployment equality

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding test for MODIFIED events

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding mergeAndBroadcastList test for MODIFIED events

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* getting final test working

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing useless code

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>
2021-10-25 11:44:35 -07:00
Aaron Schlesinger c211da9bd1
Multi-tenant interceptor and scaler (#206)
* multi-tenant interceptor and scaler

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* specifying host in XKCD ingress

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* routing the xkcd chart to the interceptor properly

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* check host header first

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* sending true active response in stream

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* passing target pending requests through to the underlying ScaledObject (so the scaler can read it later)

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* removing broken target pending requests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* using getHost in proxy handler

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding integration test

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding more tests to the integration test

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* splitting up integration tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* more checks

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* mark new test TODO

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* expanding interceptor integration tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* error messages

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* refactor test

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* more test improvements

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* rolling back target pending requests in ScaledObject

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* removing target metric error. it's not used anymore

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* improving waitFunc test

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* Refactoring the deployment cache to add better error handing and resilience.

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding doc comment

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* refactoring deploy cache and adding tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* Using interfaces for deployment watch & list

this makes tests easier

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding more deploy cache tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* Fixing up TestK8sDeploymentCacheRewatch

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* shutting down everything else when one thing errors, and adding a deployments cache endpoint

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* removing commented code

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* clarifying deployment cache JSON output, and simplifying deployment watch function

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding TODO tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* error logs and restoring the count middleware

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* using consistent net/http package name throughout main.go

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* Refactoring deployment cache deployment storage

Also, running go mod tidy and adding new TODO (i.e. failing) tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* using deployment.Status.ReadyReplicas, instead of just replicas

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* integration_tets ==> proxy_handlers_integration_test

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding some resilience to tests

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding deployment cache endpoint documentation

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* running the global test target with sh.RunV

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* adding timeout to magefile test target

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>

* finishing one TODO test and adding issue for the rest:

Signed-off-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>
2021-09-03 10:19:20 +02:00
Lucas Santos 4ec42512c6
validating pull policies (#161)
* Make imagePullPolicy configurable

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Fix tests

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Pass on config from main

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Ensure policy string

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Fix tests

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Fix test

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

Co-authored-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>
2021-05-06 16:56:36 -07:00
Lucas Santos 2d14117680
Make imagePullPolicy configurable (#155)
* Make imagePullPolicy configurable

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Fix tests

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

* Pass on config from main

Signed-off-by: Lucas Santos <lhs.santoss@gmail.com>

Co-authored-by: Aaron Schlesinger <70865+arschles@users.noreply.github.com>
2021-05-06 16:26:02 -07:00
Aaron Schlesinger 6b8d4ab8aa
Refactoring the interceptor (#105)
* Refactoring the interceptor

- Adding more testing to the proxy
- Refactoring the proxy to use standard net/http (gives it more control over the response lifecycle)
- Using the standard library test framework, because stretchr/testify/suite was not adding much (stretchr/testify/require is still in use though)

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding test for holding the connection

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing dead code

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing dead code

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* using the getter/watcher logic in the proxy handler

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* progress on fast getter/watcher implementation:

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding deployment cache

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding a backoff for the network connection

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding test targets to the magefile

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Fixing and adding more tests to the proxy

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Adding test to ensure proxy handler holds until >0 replicas on target deployment

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* refactoring in progress and more tests

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* todo test

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* fixing hanging issue

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding test for slow origin, and a TODO in the proxy tests

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* TODO tests

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* more work on connection retry and backoff

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* logging nested errors

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* better test checks and explanatory comments

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* moving sumExp utility function to top

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding tests for DialContextWithRetry

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* refactoring backoff etc...

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* refactoring the dialer

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* refactoring if/else multiple return statements

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing addition from num steps

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing dead code and updating knative attribution comment

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* removing net error type check

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding one more test

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* implementing TODO tests and cleaning up unused and logging code

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding wait func timeout

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding waitFunc timeout logic

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* starting tests for the deployment cache

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding deployment cache watch test

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* adding timing checks to the deployment cache test

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Fixing the last broken test

Turns out, don't run a handler in a goroutine because (net/http/httptest).ResponseRecorder
is not concurrency-safe. Thanks to @asw101 and @khaosdoctor for help on this!

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* Tidying up interceptor config and making operator set more config vars

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>

* fixing tests and compile errs

Signed-off-by: Aaron Schlesinger <aaron@ecomaz.net>
2021-04-12 12:48:07 -07:00