From de45bb0f6b9cf9ef266b056fa0c60ca3e2207fdf Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 19 Jan 2022 16:05:57 -0800 Subject: [PATCH] fixed: sharding strategy for OIDCSources and HTTPSources --- internal/hasher/hasher.go | 10 ++++++++++ internal/hasher/hasher_test.go | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/internal/hasher/hasher.go b/internal/hasher/hasher.go index 07deaa9..2f9bedd 100644 --- a/internal/hasher/hasher.go +++ b/internal/hasher/hasher.go @@ -41,6 +41,16 @@ func (t *Hasher) Hash(z sharder.Shardable) error { case *api.SparseLDAPSource: z.SetZHash(hash(fmt.Sprintf("%s:%s", *oo.Namespace, *oo.Name))) + case *api.OIDCSource: + z.SetZHash(hash(fmt.Sprintf("%s:%s", oo.Namespace, oo.Name))) + case *api.SparseOIDCSource: + z.SetZHash(hash(fmt.Sprintf("%s:%s", *oo.Namespace, *oo.Name))) + + case *api.HTTPSource: + z.SetZHash(hash(fmt.Sprintf("%s:%s", oo.Namespace, oo.Name))) + case *api.SparseHTTPSource: + z.SetZHash(hash(fmt.Sprintf("%s:%s", *oo.Namespace, *oo.Name))) + case *api.A3SSource: z.SetZHash(hash(fmt.Sprintf("%s:%s", oo.Namespace, oo.Name))) case *api.SparseA3SSource: diff --git a/internal/hasher/hasher_test.go b/internal/hasher/hasher_test.go index edd4e53..0d99e94 100644 --- a/internal/hasher/hasher_test.go +++ b/internal/hasher/hasher_test.go @@ -8,7 +8,7 @@ import ( "go.aporeto.io/a3s/pkgs/api" ) -func TestShard(t *testing.T) { +func TestHash(t *testing.T) { Convey("Given I have a hasher", t, func() { @@ -76,6 +76,38 @@ func TestShard(t *testing.T) { So(o.ZHash, ShouldEqual, hash(fmt.Sprintf("%s:%s", aString, aString))) }) + Convey("Then sharding an OIDCSource should work", func() { + o := api.NewOIDCSource() + o.Namespace = aString + o.Name = aString + So(s.Hash(o), ShouldBeNil) + So(o.Zone, ShouldEqual, 0) + So(o.ZHash, ShouldEqual, hash(fmt.Sprintf("%s:%s", aString, aString))) + + so := api.NewSparseOIDCSource() + so.Namespace = &aString + so.Name = &aString + So(s.Hash(so), ShouldBeNil) + So(*so.Zone, ShouldEqual, 0) + So(o.ZHash, ShouldEqual, hash(fmt.Sprintf("%s:%s", aString, aString))) + }) + + Convey("Then sharding an HTTPSource should work", func() { + o := api.NewHTTPSource() + o.Namespace = aString + o.Name = aString + So(s.Hash(o), ShouldBeNil) + So(o.Zone, ShouldEqual, 0) + So(o.ZHash, ShouldEqual, hash(fmt.Sprintf("%s:%s", aString, aString))) + + so := api.NewSparseHTTPSource() + so.Namespace = &aString + so.Name = &aString + So(s.Hash(so), ShouldBeNil) + So(*so.Zone, ShouldEqual, 0) + So(o.ZHash, ShouldEqual, hash(fmt.Sprintf("%s:%s", aString, aString))) + }) + Convey("Then sharding an A3SSource should work", func() { o := api.NewA3SSource() o.Namespace = aString