mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-27 05:04:52 +00:00
registry: move generic registry tester into k8s.io/apiserver
This commit is contained in:
@@ -12,6 +12,7 @@ go_test(
|
||||
importpath = "k8s.io/kubernetes/pkg/registry/extensions/daemonset/storage",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/registry/registrytest:go_default_library",
|
||||
@@ -20,6 +21,7 @@ go_test(
|
||||
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library",
|
||||
],
|
||||
)
|
||||
|
@@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
@@ -81,7 +82,7 @@ func TestCreate(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
ds := newValidDaemonSet()
|
||||
ds.ObjectMeta = metav1.ObjectMeta{}
|
||||
test.TestCreate(
|
||||
@@ -108,7 +109,7 @@ func TestUpdate(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestUpdate(
|
||||
// valid
|
||||
newValidDaemonSet(),
|
||||
@@ -137,7 +138,7 @@ func TestDelete(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestDelete(newValidDaemonSet())
|
||||
}
|
||||
|
||||
@@ -145,7 +146,7 @@ func TestGet(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestGet(newValidDaemonSet())
|
||||
}
|
||||
|
||||
@@ -153,7 +154,7 @@ func TestList(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestList(newValidDaemonSet())
|
||||
}
|
||||
|
||||
@@ -161,7 +162,7 @@ func TestWatch(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestWatch(
|
||||
validDaemonSet,
|
||||
// matching labels
|
||||
|
@@ -12,6 +12,7 @@ go_test(
|
||||
importpath = "k8s.io/kubernetes/pkg/registry/extensions/deployment/storage",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/apis/autoscaling:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
@@ -26,6 +27,7 @@ go_test(
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/errors:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library",
|
||||
|
@@ -31,6 +31,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
storeerr "k8s.io/apiserver/pkg/storage/errors"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
@@ -99,7 +100,7 @@ func TestCreate(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Deployment.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
deployment := validNewDeployment()
|
||||
deployment.ObjectMeta = metav1.ObjectMeta{}
|
||||
test.TestCreate(
|
||||
@@ -119,7 +120,7 @@ func TestUpdate(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Deployment.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test.TestUpdate(
|
||||
// valid
|
||||
validNewDeployment(),
|
||||
@@ -152,7 +153,7 @@ func TestDelete(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Deployment.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test.TestDelete(validNewDeployment())
|
||||
}
|
||||
|
||||
@@ -160,7 +161,7 @@ func TestGet(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Deployment.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test.TestGet(validNewDeployment())
|
||||
}
|
||||
|
||||
@@ -168,7 +169,7 @@ func TestList(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Deployment.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test.TestList(validNewDeployment())
|
||||
}
|
||||
|
||||
@@ -176,7 +177,7 @@ func TestWatch(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Deployment.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Deployment.Store, legacyscheme.Scheme)
|
||||
test.TestWatch(
|
||||
validNewDeployment(),
|
||||
// matching labels
|
||||
|
@@ -12,6 +12,7 @@ go_test(
|
||||
importpath = "k8s.io/kubernetes/pkg/registry/extensions/ingress/storage",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/registry/registrytest:go_default_library",
|
||||
@@ -21,6 +22,7 @@ go_test(
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library",
|
||||
],
|
||||
)
|
||||
|
@@ -25,6 +25,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/util/intstr"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
@@ -123,7 +124,7 @@ func TestCreate(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
ingress := validIngress()
|
||||
noDefaultBackendAndRules := validIngress()
|
||||
noDefaultBackendAndRules.Spec.Backend = &extensions.IngressBackend{}
|
||||
@@ -143,7 +144,7 @@ func TestUpdate(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestUpdate(
|
||||
// valid
|
||||
validIngress(),
|
||||
@@ -179,7 +180,7 @@ func TestDelete(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestDelete(validIngress())
|
||||
}
|
||||
|
||||
@@ -187,7 +188,7 @@ func TestGet(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestGet(validIngress())
|
||||
}
|
||||
|
||||
@@ -195,7 +196,7 @@ func TestList(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestList(validIngress())
|
||||
}
|
||||
|
||||
@@ -203,7 +204,7 @@ func TestWatch(t *testing.T) {
|
||||
storage, _, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme)
|
||||
test.TestWatch(
|
||||
validIngress(),
|
||||
// matching labels
|
||||
|
@@ -12,6 +12,7 @@ go_test(
|
||||
importpath = "k8s.io/kubernetes/pkg/registry/extensions/podsecuritypolicy/storage",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/registry/registrytest:go_default_library",
|
||||
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
|
||||
@@ -20,6 +21,7 @@ go_test(
|
||||
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library",
|
||||
],
|
||||
)
|
||||
|
@@ -28,6 +28,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
"k8s.io/kubernetes/pkg/registry/registrytest"
|
||||
)
|
||||
@@ -69,7 +70,7 @@ func TestCreate(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
psp := validNewPodSecurityPolicy()
|
||||
psp.ObjectMeta = metav1.ObjectMeta{GenerateName: "foo-"}
|
||||
test.TestCreate(
|
||||
@@ -86,7 +87,7 @@ func TestUpdate(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test.TestUpdate(
|
||||
// valid
|
||||
validNewPodSecurityPolicy(),
|
||||
@@ -103,7 +104,7 @@ func TestDelete(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope().ReturnDeletedObject()
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope().ReturnDeletedObject()
|
||||
test.TestDelete(validNewPodSecurityPolicy())
|
||||
}
|
||||
|
||||
@@ -111,7 +112,7 @@ func TestGet(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test.TestGet(validNewPodSecurityPolicy())
|
||||
}
|
||||
|
||||
@@ -119,7 +120,7 @@ func TestList(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test.TestList(validNewPodSecurityPolicy())
|
||||
}
|
||||
|
||||
@@ -127,7 +128,7 @@ func TestWatch(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test := genericregistrytest.New(t, storage.Store, legacyscheme.Scheme).ClusterScope()
|
||||
test.TestWatch(
|
||||
validNewPodSecurityPolicy(),
|
||||
// matching labels
|
||||
|
@@ -12,6 +12,7 @@ go_test(
|
||||
importpath = "k8s.io/kubernetes/pkg/registry/extensions/replicaset/storage",
|
||||
library = ":go_default_library",
|
||||
deps = [
|
||||
"//pkg/api/legacyscheme:go_default_library",
|
||||
"//pkg/apis/autoscaling:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
@@ -25,6 +26,7 @@ go_test(
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library",
|
||||
"//vendor/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library",
|
||||
],
|
||||
|
@@ -28,6 +28,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/diff"
|
||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
@@ -96,7 +97,7 @@ func TestCreate(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.ReplicaSet.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
rs := validNewReplicaSet()
|
||||
rs.ObjectMeta = metav1.ObjectMeta{}
|
||||
test.TestCreate(
|
||||
@@ -117,7 +118,7 @@ func TestUpdate(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.ReplicaSet.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test.TestUpdate(
|
||||
// valid
|
||||
validNewReplicaSet(),
|
||||
@@ -145,7 +146,7 @@ func TestDelete(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.ReplicaSet.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test.TestDelete(validNewReplicaSet())
|
||||
}
|
||||
|
||||
@@ -204,7 +205,7 @@ func TestGet(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.ReplicaSet.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test.TestGet(validNewReplicaSet())
|
||||
}
|
||||
|
||||
@@ -212,7 +213,7 @@ func TestList(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.ReplicaSet.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test.TestList(validNewReplicaSet())
|
||||
}
|
||||
|
||||
@@ -220,7 +221,7 @@ func TestWatch(t *testing.T) {
|
||||
storage, server := newStorage(t)
|
||||
defer server.Terminate(t)
|
||||
defer storage.ReplicaSet.Store.DestroyFunc()
|
||||
test := registrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test := genericregistrytest.New(t, storage.ReplicaSet.Store, legacyscheme.Scheme)
|
||||
test.TestWatch(
|
||||
validNewReplicaSet(),
|
||||
// matching labels
|
||||
|
Reference in New Issue
Block a user