Commit Graph

15050 Commits

Author SHA1 Message Date
immutablet
4d24b41410 Use single kms-plugin mock in unit and integration tests. 2019-10-17 13:46:03 -07:00
Kubernetes Prow Robot
397f8b4248
Merge pull request #84020 from BenTheElder/bentheelder-checks-types
add myself to typecheck / go-srcimporter owners, move rmmh to emeritus
2019-10-17 09:52:38 -07:00
Miciah Masters
980b6406b2 Prefer to delete doubled-up pods of a ReplicaSet
When scaling down a ReplicaSet, delete doubled up replicas first, where a
"doubled up replica" is defined as one that is on the same node as an
active replica belonging to a related ReplicaSet.  ReplicaSets are
considered "related" if they have a common controller (typically a
Deployment).

The intention of this change is to make a rolling update of a Deployment
scale down the old ReplicaSet as it scales up the new ReplicaSet by
deleting pods from the old ReplicaSet that are colocated with ready pods of
the new ReplicaSet.  This change in the behavior of rolling updates can be
combined with pod affinity rules to preserve the locality of a Deployment's
pods over rollout.

A specific scenario that benefits from this change is when a Deployment's
pods are exposed by a Service that has type "LoadBalancer" and external
traffic policy "Local".  In this scenario, the load balancer uses health
checks to determine whether it should forward traffic for the Service to a
particular node.  If the node has no local endpoints for the Service, the
health check will fail for that node.  Eventually, the load balancer will
stop forwarding traffic to that node.  In the meantime, the service proxy
drops traffic for that Service.  Thus, in order to reduce risk of dropping
traffic during a rolling update, it is desirable preserve node locality of
endpoints.

* pkg/controller/controller_utils.go (ActivePodsWithRanks): New type to
sort pods using a given ranking.
* pkg/controller/controller_utils_test.go (TestSortingActivePodsWithRanks):
New test for ActivePodsWithRanks.
* pkg/controller/replicaset/replica_set.go
(getReplicaSetsWithSameController): New method.  Given a ReplicaSet, return
all ReplicaSets that have the same owner.
(manageReplicas): Call getIndirectlyRelatedPods, and pass its result to
getPodsToDelete.
(getIndirectlyRelatedPods): New method.  Given a ReplicaSet, return all
pods that are owned by any ReplicaSet with the same owner.
(getPodsToDelete): Add an argument for related pods.  Use related pods and
the new getPodsRankedByRelatedPodsOnSameNode function to take into account
whether a pod is doubled up when sorting pods for deletion.
(getPodsRankedByRelatedPodsOnSameNode): New function.  Return an
ActivePodsWithRanks value that wraps the given slice of pods and computes
ranks where each pod's rank is equal to the number of active related pods
that are colocated on the same node.
* pkg/controller/replicaset/replica_set_test.go (newReplicaSet): Set
OwnerReferences on the ReplicaSet.
(newPod): Set a unique UID on the pod.
(byName): New type to sort pods by name.
(TestGetReplicaSetsWithSameController): New test for
getReplicaSetsWithSameController.
(TestRelatedPodsLookup): New test for getIndirectlyRelatedPods.
(TestGetPodsToDelete): Augment the "various pod phases and conditions, diff
= len(pods)" test case to ensure that scale-down still selects doubled-up
pods if there are not enough other pods to scale down.  Add a "various pod
phases and conditions, diff = len(pods), relatedPods empty" test case to
verify that getPodsToDelete works even if related pods could not be
determined.  Add a "ready and colocated with another ready pod vs not
colocated, diff < len(pods)" test case to verify that a doubled-up pod gets
preferred for deletion.  Augment the "various pod phases and conditions,
diff < len(pods)" test case to ensure that not-ready pods are preferred
over ready but doubled-up pods.
* pkg/controller/replicaset/BUILD: Regenerate.
* test/e2e/apps/deployment.go
(testRollingUpdateDeploymentWithLocalTrafficLoadBalancer): New end-to-end
test.  Create a deployment with a rolling update strategy and affinity
rules and a load balancer with "Local" external traffic policy, and verify
that set of nodes with local endponts for the service remains unchanged
during rollouts.
(setAffinity): New helper, used by
testRollingUpdateDeploymentWithLocalTrafficLoadBalancer.
* test/e2e/framework/service/jig.go (GetEndpointNodes): Factor building the
set of node names out...
(GetEndpointNodeNames): ...into this new method.
2019-10-17 11:52:32 -04:00
Kubernetes Prow Robot
fef819254a
Merge pull request #83998 from draveness/feature/node-affinity-score-plugin
feat(scheduler): implement node affinity as score plugin
2019-10-17 08:24:38 -07:00
Abdullah Gharaibeh
517116921b GeneralPredicate as plugin config 2019-10-17 11:13:57 -04:00
notpad
f06925b0ee [migration phase 1] CSIMaxVolumeLimitChecker as filter plugin 2019-10-17 22:04:02 +08:00
Kubernetes Prow Robot
534051acec
Merge pull request #84036 from Huang-Wei/tbe-int-test-issue
Ensure TaintBasedEviction int test not rely on TaintNodeByConditions
2019-10-17 05:12:50 -07:00
draveness
3d74da4d53 feat(scheduler): implement node affinity as score plugin 2019-10-17 17:02:10 +08:00
Kubernetes Prow Robot
cedacc9cae
Merge pull request #84025 from oomichi/move-CreateNginxPod
Move CreateNginxPod() to specific e2e
2019-10-17 01:47:48 -07:00
Kubernetes Prow Robot
bdc3f96838
Merge pull request #83989 from wojtek-t/remove_coordination_v1beta1
Swtich nodelifecyclecontroller to coordination/v1
2019-10-17 01:47:29 -07:00
Kubernetes Prow Robot
3719fcdffa
Merge pull request #82072 from draveness/feature/use-context-instead-of-channel
feat(scheduler): use context in scheduler package
2019-10-17 01:46:39 -07:00
Wei Huang
fbcc3c183a
Ensure TaintBasedEviction int test not rely on TaintNodeByConditions 2019-10-17 01:25:12 -07:00
Kubernetes Prow Robot
c3d8ad06a5
Merge pull request #84002 from cofyc/fix74552-cleanup
e2e: remove duplicated test specs
2019-10-16 22:25:41 -07:00
Kubernetes Prow Robot
9aed79b585
Merge pull request #83812 from oomichi/move-Initialized
Move Initialized() to e2e framework util
2019-10-16 22:25:21 -07:00
Kubernetes Prow Robot
cae9bbd059
Merge pull request #81358 from bclau/tests/replace-redis-image
tests: Replaces Redis image with Agnhost
2019-10-16 22:24:51 -07:00
Howard Zhang
1c9da19bf5 Add kubectlPath flag to e2e_node.test
e2e_node.test does not set default kubectlPath, which lead to test
errors as following:
[Fail] [sig-storage] EmptyDir volumes [It] pod should support
shared volumes between containers [Conformance]

When the test trying to read file in shared volume, it uses
"kubeclt exec namespace -c container_name -- cat file_name".
However, as variable framework.TestContext.KubectlPath not set,
kubectl binary can not be found in the test and the tast fails.

This patch move kubectlPath flag from RegisterClusterFlags to
RegisterCommonFlags, thus default value for
framework.TestContext.KubectlPath will be set,and
user can also use --kubectl-path flag to set kubectl path.

Signed-off-by: Howard Zhang <howard.zhang@arm.com>
2019-10-17 11:29:44 +08:00
draveness
47a6c5b693 feat(scheduler): use context in the scheduler package
+ Use context instead of stopCh
+ Add context to the scheduling framework interface
2019-10-17 09:03:55 +08:00
Kenichi Omichi
9e17a0e9f3 Move CreateNginxPod() to specific e2e
CreateNginxPod() is called from flexvolume_online_resize only and
that seems storage specific function because that requires a PVC.
So this moves the function to the place which calls it for the code
cleanup.
2019-10-17 00:10:38 +00:00
Benjamin Elder
0f807d5048 add myself to typecheck / go-srcimporter owners, move rmmh to emeritus 2019-10-16 15:17:22 -07:00
Kubernetes Prow Robot
cb19b56831
Merge pull request #83419 from deads2k/insecure-backend-proxy
Insecure backend proxy
2019-10-16 13:58:38 -07:00
Kubernetes Prow Robot
0e2383df15
Merge pull request #83893 from draveness/feature/node-prefer-avoid-pods
feat(scheduler): implement NodePreferAvoidPods as score plugin
2019-10-16 11:37:30 -07:00
Kubernetes Prow Robot
d1188a6802
Merge pull request #83946 from jsafrane/disable-local-reconstruction
Disable local block volume reconstruction test
2019-10-16 09:36:08 -07:00
Kubernetes Prow Robot
461c9b3c8c
Merge pull request #83935 from draveness/feature/fix-scheduler-perf
fix: scheduler perf test with pod informer
2019-10-16 09:35:33 -07:00
David Eads
867ee1d5ff add insecurebackendproxy 2019-10-16 11:43:17 -04:00
Yecheng Fu
1ff13e0782 e2e: remove duplicatd test suites 2019-10-16 19:42:11 +08:00
wojtekt
cf9203501e Swtich nodelifecyclecontroller to coordination/v1 2019-10-16 10:59:02 +02:00
Kubernetes Prow Robot
63cf2e260b
Merge pull request #83819 from mrbobbytables/emeritus-jbeda
Move jbeda to emeritus status.
2019-10-15 23:06:20 -07:00
Kubernetes Prow Robot
6b3d154787
Merge pull request #83816 from oomichi/remove-test_verify.go
Remove test_verify from e2e framework package
2019-10-15 23:06:09 -07:00
Kubernetes Prow Robot
d160c68aa4
Merge pull request #83978 from mikedanese/fuzz
add fuzzing targets for sig-yaml and yaml.v2
2019-10-15 21:10:07 -07:00
Mike Danese
647d6582bf add fuzzing targets for sig-yaml and yaml.v2
This is in prepration to add continous fuzzing of various targets via
https://github.com/google/oss-fuzz.
2019-10-16 00:40:50 +00:00
Kubernetes Prow Robot
cb3b715de2
Merge pull request #83804 from jpbetz/etcd-3_3_17_server
Upgrade to etcd server 3.3.17
2019-10-15 12:50:09 -07:00
Jan Safranek
7c240a18b6 Disable local block volume reconstruction test
Quite hacky, hoping to fix the volume plugin soon.
2019-10-15 13:59:36 +02:00
draveness
e5a23f8dda fix: scheduler perf test with pod informer 2019-10-15 13:54:45 +08:00
Kubernetes Prow Robot
46a29a0cc3
Merge pull request #71674 from grayluck/firewall-event-msg
Change XPN firewall change msg. Should be required by security admin
2019-10-14 21:09:51 -07:00
Kubernetes Prow Robot
63bd1d7a5c
Merge pull request #80725 from aramase/dualstack-phase2-e2e
E2E tests for dualstack phase2
2019-10-14 17:45:51 -07:00
draveness
2d7044a556 feat(scheduler): implement NodePreferAvoidPods as score plugin 2019-10-14 21:21:24 +08:00
Joe Betz
c92bd5e7b5 Upgrade to etcd server 3.3.17 2019-10-13 17:17:15 -07:00
notpad
4ff7251026 [migration phase 1] VolumeZoneChecker as filter plugin 2019-10-14 07:45:40 +08:00
Kubernetes Prow Robot
2e55cf01d1
Merge pull request #83854 from mrbobbytables/update-test-vsphere-owners
Prune inactive owners from test/e2e/framework/providers/vsphere/OWNERS.
2019-10-13 13:20:36 -07:00
Kubernetes Prow Robot
dd5cb6426d
Merge pull request #83849 from draveness/feature/node-locality-as-score-plugin
feat: implement imagelocality as a score plugin
2019-10-13 06:36:35 -07:00
Bob Killen
340eefe76b
Prune inactive owners from test/e2e/framework/providers/vsphere/OWNERS. 2019-10-13 08:39:38 -04:00
yuxiaobo
3346d3d18f Remove direct references to prometheus from transformation_testcase.go
Signed-off-by: yuxiaobo <yuxiaobogo@163.com>
2019-10-13 20:36:39 +08:00
draveness
6f6618fc5d feat: implement imagelocality as a score plugin 2019-10-13 19:58:21 +08:00
Kubernetes Prow Robot
ceceacaa77
Merge pull request #83573 from ahmad-diaa/remove-factory-package
Move Factory Package to Scheduler
2019-10-13 00:32:36 -07:00
Kubernetes Prow Robot
743031d793
Merge pull request #83817 from oomichi/rename-framework-funcs
Rename e2e framework functions used locally
2019-10-12 17:34:37 -07:00
Ahmad Diaa
4448a1cea9 move factory package to scheduler 2019-10-12 23:03:07 +02:00
Lubomir I. Ivanov
0b3d50b6dc test/e2e: move GKE/GCE tests from /lifecycle to /cloud/gcp
Move GKE/GCE tests from the sig-cluster-lifecycle
ownership to the sig-cloud-provider-gcp ownership
(ideally the GCP sub-project).
2019-10-12 21:40:07 +03:00
Lubomir I. Ivanov
ed5c2979b7 test/test_owners.csv: remove sig-cluster-lifecycle ownership
These tests either no longer exists or a now owned by a different
SIG or in the case of SIG Cloud Provider -> the GCP sub project.
2019-10-12 21:40:07 +03:00
Kubernetes Prow Robot
fbcfabe8ae
Merge pull request #83808 from oomichi/rename-volume-fixtures
Rename Generate[Read|Write]FileCmd()s on e2e framework
2019-10-11 22:40:38 -07:00
Kubernetes Prow Robot
a7a6ca80d8
Merge pull request #83731 from notpad/feature/migration_nodiskconflict
[migration phase 1] NoDiskConflict as filter plugin
2019-10-11 21:16:52 -07:00
Kubernetes Prow Robot
8553d50426
Merge pull request #83793 from oomichi/psp
Fix package name of psp on e2e framework
2019-10-11 18:05:04 -07:00
Kenichi Omichi
0126d35df1 Rename e2e framework functions used locally
The following functions are used locally in e2e framework subpackages.
 - RunSSHCommandViaBastion
 - MakeNginxPod
 - LogPodTerminationMessages
 - CheckPodsCondition
 - SetNodeAffinityRequirement

This renames them to clarify them as local ones.
2019-10-12 00:06:49 +00:00
Kenichi Omichi
ab208e9063 Remove test_verify from e2e framework package
test_verify.go contained the function TestPodSuccessOrFail() only,
and the function is used in the package only.
This moves the function to create.go and remove test_verify.go.
2019-10-12 00:01:20 +00:00
notpad
9e426a6be1 [migration phase 1] NoDiskConflict as filter plugin 2019-10-12 08:00:44 +08:00
Kenichi Omichi
06d41a485c Move Initialized() to e2e framework util
The function is used at e2e framework util module only.
So this moves the function to the module for trying to remove
dependencies to subpackages from core e2e framework.
2019-10-11 22:29:03 +00:00
Kenichi Omichi
e13fb0cbe5 Rename Generate[Read|Write]FileCmd()s
These functions are only used in fixtures.go module.
So it is not necessary to define them for exposing.
This renames these functions for making them local functions clearly.
2019-10-11 21:54:35 +00:00
Bob Killen
e65d8bb11f
Move jbeda to emeritus status. 2019-10-11 17:46:18 -04:00
Jean Rouge
d17624ad82 Amending the GMSA e2e test to allow it to run against Windows-only clusters
e2e Windows tests can be run against Windows-only clusters, which
currently will cause the GMSA test to fail, as it needs to be able to
deploy pods to at least one Linux node, for the GMSA webhook; this patch leverages the new
`--tolerate-master` flag that was added to the GMSA webhook deploy
script in https://github.com/kubernetes-sigs/windows-gmsa/pull/18.

Signed-off-by: Jean Rouge <rougej+github@gmail.com>
2019-10-11 14:16:04 -07:00
Kubernetes Prow Robot
a847874655
Merge pull request #83792 from liggitt/flake-pre-stop
Mark 'wait until preStop hook completes the process' flaky
2019-10-11 13:42:38 -07:00
Kubernetes Prow Robot
2125c26a40
Merge pull request #83647 from BenTheElder/tainting-nodes-is-disruptive
tag test that taints a node as disruptive
2019-10-11 13:42:18 -07:00
Kenichi Omichi
c0430d3f8e Fix package name of psp on e2e framework
psp is imported as separated package from main framework but the
name was framework. This made confusion, so this renames it to psp.
2019-10-11 18:21:28 +00:00
Kubernetes Prow Robot
48d0088510
Merge pull request #83702 from mattjmcnaughton/mattjmcnaughton/staticcheck-fix-e2e-lifecycle
Address staticcheck failures for test/e2e/lifecycle/bootstrap
2019-10-11 10:53:57 -07:00
Jordan Liggitt
73dce3adec Mark 'wait until preStop hook completes the process' flaky 2019-10-11 13:09:32 -04:00
Kubernetes Prow Robot
77b86c4adf
Merge pull request #83764 from cofyc/fix83635
[migration phase 1] Implement CheckVolumeBinding as a filter plugin
2019-10-11 09:29:52 -07:00
Kubernetes Prow Robot
c980000176
Merge pull request #83663 from draveness/feature/add-shared-informers-factory
feat(scheduler): expose SharedInformerFactory to the framework handle
2019-10-11 09:29:40 -07:00
mattjmcnaughton
b92a51285b
Address staticcheck failures for test/e2e/lifecycle/bootstrap
Make small, non-functional changes to make the
`test/e2e/lifecycle/bootstrap` pass staticcheck.
2019-10-11 10:28:15 -04:00
Yecheng Fu
e8795562f9 [migration phase 1] Implement CheckVolumeBinding as a filter plugin 2019-10-11 20:35:11 +08:00
Kubernetes Prow Robot
833e8dc10b
Merge pull request #83736 from krzysied/kubemark_node_labels
Kubemark node labels
2019-10-11 05:17:47 -07:00
Krzysztof Siedlecki
8f9d9961a2 fixing sed separator 2019-10-11 10:54:01 +02:00
Kubernetes Prow Robot
c1a735c642
Merge pull request #83601 from ahg-g/ahg-migration-priority
Implemented taints and tolerations priority function as a Score plugin
2019-10-11 00:05:50 -07:00
Kubernetes Prow Robot
f985367ba4
Merge pull request #83755 from roycaihw/e2e-kubelet-resource-monitor
kubelet e2e: run resource monitor only if the actual number of nodes is small
2019-10-10 22:49:49 -07:00
draveness
ee4dec65b5 feat(scheduler): expose SharedInformerFactory to the framework handle 2019-10-11 10:23:21 +08:00
Kubernetes Prow Robot
d69dfa7e13
Merge pull request #83729 from danwinship/drop-getreadyschedulablenodesordie
Drop framework.GetReadySchedulableNodesOrDie
2019-10-10 19:00:43 -07:00
Kubernetes Prow Robot
a5e6ac0a95
Merge pull request #83694 from ahg-g/ahg-adv-config
[migration phase 1] Make scheduler cache, volume binder and listers available when registering default plugins
2019-10-10 19:00:21 -07:00
Kubernetes Prow Robot
242d806672
Merge pull request #83587 from timothysc/testing-OWNERS
Audit of test/* OWNERS files
2019-10-10 19:00:00 -07:00
Kubernetes Prow Robot
1e94c12d41
Merge pull request #80880 from DirectXMan12/bug/length-is-measured-in-bytes
Validation: len is measured in bytes
2019-10-10 18:59:20 -07:00
Haowei Cai
f5d6951c96 kubelet e2e: run resource monitor only if the actual number of nodes is
small
2019-10-10 17:02:51 -07:00
Kubernetes Prow Robot
77f86630d4
Merge pull request #82491 from openSUSE/pod-status-check
Validate container status in e2e pod status checks
2019-10-10 16:27:20 -07:00
Anish Ramasekar
50e2182faf
e2e test for dualstack phase2
dual-stack phase2 tests

update e2elog to framework

run update-bazel

update comment

fix go vet error

Review feedback

update method

Review feedback
2019-10-10 16:24:39 -07:00
Abdullah Gharaibeh
7429b0fe86 Implemented taints and tolerations priority function as a Score plugin 2019-10-10 17:49:40 -04:00
Timothy St. Clair
97055841b1 Audit of test/* OWNERS files 2019-10-10 15:52:51 -05:00
Kubernetes Prow Robot
1bb7835f0a
Merge pull request #83609 from avalluri/fix-storage-e2e-tests
Remove e2e/common package usage in volumemode testsuite
2019-10-10 13:41:52 -07:00
Kubernetes Prow Robot
3db6d3abcf
Merge pull request #83551 from dims/move-external-facing-kubelet-apis-to-staging
Move external facing kubelet apis to staging
2019-10-10 13:41:36 -07:00
Abdullah Gharaibeh
456df97745 made scheduler cache and volume binder available when instantiating factories for default plugins 2019-10-10 16:21:29 -04:00
Solly Ross
40aea0c70d Validation: len is measured in bytes
The `TooLong` validation message mentioned characters, but the `len`
function actually measures bytes, no characters.  This switches it over
to use bytes.

Characters are mostly an illusory concept anyway -- a vain attempt to
shield our minds against the lovecraftian nightmares that comes from
attemping to truly comprehend that eldritch treatise known as the
Unicode standard.  Which is to say: measuring things in characters is
hard and mostly ambiguous, and probably not what we meant to do.
2019-10-10 09:48:49 -07:00
Kubernetes Prow Robot
46dd075bab
Merge pull request #83718 from serathius/aliases
Introduce sig-instrumentation aliases in OWNERS_ALISES and simplify OWNERS files
2019-10-10 09:04:05 -07:00
Kubernetes Prow Robot
4eb1ca46ed
Merge pull request #83667 from k-toyoda-pi/use_log_e2e_storage_topology
Use log functions of core framework on testsuites/topology.go
2019-10-10 07:31:57 -07:00
Sascha Grunert
5a8b695fef
Validate AgnhostPod readyness status in e2e tests
We now additionally check if the agnhost pods are ready before
marking the pod as running to increase the overall test stability.

Relates to: https://github.com/kubernetes/kubernetes/pull/82420
Fixes: https://github.com/kubernetes/kubernetes/issues/82445

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
2019-10-10 14:11:06 +02:00
Marek Siarkowicz
c601d34eba Introduce sig-instrumentation aliases in OWNERS_ALISES and simplify OWNERS files 2019-10-10 14:04:20 +02:00
Kevin Taylor
cb8a7c1a4c Promote VolumeSubpathEnvExpansion feature gate to GA 2019-10-10 09:34:40 +01:00
Amarnath Valluri
3333806734 Remove e2e/common package usage in volumemode testsuite
Change 04300826fd has introduced
"e2e/common" package dependency on volumemode testusuite. This results in
pulling all tests defined in common package while running storage e2e tests,
which are not necessary.

The only interested part from common package is the WaitTimeoutForEvent().
2019-10-10 09:30:12 +03:00
toyoda
1ae7726ff6 Use log functions of core framework on test/e2e/storage/testsuites/topology.go 2019-10-10 09:16:19 +09:00
Kubernetes Prow Robot
4d6deea241
Merge pull request #83681 from mattjmcnaughton/mattjmcnaughton/fix-staticcheck-test-e2e-node
Address `staticcheck` failures for `test/e2e/node/...`
2019-10-09 14:51:07 -07:00
Dan Winship
779a842b3c Drop framework.GetReadySchedulableNodesOrDie
It is now fully replaced by e2enode.GetReadySchedulableNodes,
e2enode.GetBoundedReadySchedulableNodes, and
e2enode.GetRandomReadySchedulableNode.
2019-10-09 15:20:26 -04:00
mattjmcnaughton
69a473be38
Address staticcheck failures for test/e2e/node/...
Fix the `staticcheck` failures for `test/e2e/node`. All of the
staticcheck errors were for variables which were never used. When these
values were `err`, we added processing for the errors. When they were
values that were just never used, we stopped giving them a name.
2019-10-09 10:26:11 -04:00
Dan Winship
6a040438ea Update test/e2e/storage for new GetReadySchedulableNodes stuff 2019-10-09 08:12:56 -04:00
Benjamin Elder
f3d962ad64 tag test that taints a node as disruptive 2019-10-08 18:22:17 -07:00
Kubernetes Prow Robot
72d052a444
Merge pull request #81797 from yastij/move-metrics-util
move util/metrics to component-base
2019-10-08 17:08:05 -07:00
Kubernetes Prow Robot
05474a6d84
Merge pull request #78306 from hoyho/feat/e2e-storage-dynamic-size
feat(e2e): refactor hard-coded provision size
2019-10-08 17:07:51 -07:00
Kubernetes Prow Robot
384e03ad92
Merge pull request #83616 from alejandrox1/add-alejandrox1-test-eviewer
Added alejandrox1 as test/* reviewer
2019-10-08 13:31:51 -07:00