1// Copyright 2019 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package bttest 16 17import ( 18 "context" 19 "regexp" 20 21 "github.com/golang/protobuf/ptypes/empty" 22 btapb "google.golang.org/genproto/googleapis/bigtable/admin/v2" 23 iampb "google.golang.org/genproto/googleapis/iam/v1" 24 "google.golang.org/genproto/googleapis/longrunning" 25 "google.golang.org/grpc/codes" 26 "google.golang.org/grpc/status" 27) 28 29var _ btapb.BigtableInstanceAdminServer = (*server)(nil) 30 31var errUnimplemented = status.Error(codes.Unimplemented, "unimplemented feature") 32 33func (s *server) CreateInstance(ctx context.Context, req *btapb.CreateInstanceRequest) (*longrunning.Operation, error) { 34 return nil, errUnimplemented 35} 36 37func (s *server) GetInstance(ctx context.Context, req *btapb.GetInstanceRequest) (*btapb.Instance, error) { 38 return nil, errUnimplemented 39} 40 41func (s *server) ListInstances(ctx context.Context, req *btapb.ListInstancesRequest) (*btapb.ListInstancesResponse, error) { 42 return nil, errUnimplemented 43} 44 45func (s *server) UpdateInstance(ctx context.Context, req *btapb.Instance) (*btapb.Instance, error) { 46 return nil, errUnimplemented 47} 48 49func (s *server) PartialUpdateInstance(ctx context.Context, req *btapb.PartialUpdateInstanceRequest) (*longrunning.Operation, error) { 50 return nil, errUnimplemented 51} 52 53var ( 54 // As per https://godoc.org/google.golang.org/genproto/googleapis/bigtable/admin/v2#DeleteInstanceRequest.Name 55 // the Name should be of the form: 56 // `projects/<project>/instances/<instance>` 57 instanceNameRegRaw = `^projects/[a-z][a-z0-9\\-]+[a-z0-9]/instances/[a-z][a-z0-9\\-]+[a-z0-9]$` 58 regInstanceName = regexp.MustCompile(instanceNameRegRaw) 59) 60 61func (s *server) DeleteInstance(ctx context.Context, req *btapb.DeleteInstanceRequest) (*empty.Empty, error) { 62 name := req.GetName() 63 if !regInstanceName.Match([]byte(name)) { 64 return nil, status.Errorf(codes.InvalidArgument, 65 "Error in field 'instance_name' : Invalid name for collection instances : Should match %s but found '%s'", 66 instanceNameRegRaw, name) 67 } 68 69 s.mu.Lock() 70 defer s.mu.Unlock() 71 72 _, ok := s.instances[name] 73 if !ok { 74 return nil, status.Errorf(codes.NotFound, "instance %q not found", name) 75 } 76 77 // Then finally remove the instance. 78 delete(s.instances, name) 79 80 return new(empty.Empty), nil 81} 82 83func (s *server) CreateCluster(ctx context.Context, req *btapb.CreateClusterRequest) (*longrunning.Operation, error) { 84 return nil, errUnimplemented 85} 86 87func (s *server) GetCluster(ctx context.Context, req *btapb.GetClusterRequest) (*btapb.Cluster, error) { 88 return nil, errUnimplemented 89} 90 91func (s *server) ListClusters(ctx context.Context, req *btapb.ListClustersRequest) (*btapb.ListClustersResponse, error) { 92 return nil, errUnimplemented 93} 94 95func (s *server) UpdateCluster(ctx context.Context, req *btapb.Cluster) (*longrunning.Operation, error) { 96 return nil, errUnimplemented 97} 98 99func (s *server) DeleteCluster(ctx context.Context, req *btapb.DeleteClusterRequest) (*empty.Empty, error) { 100 return nil, errUnimplemented 101} 102 103func (s *server) CreateAppProfile(ctx context.Context, req *btapb.CreateAppProfileRequest) (*btapb.AppProfile, error) { 104 return nil, errUnimplemented 105} 106 107func (s *server) GetAppProfile(ctx context.Context, req *btapb.GetAppProfileRequest) (*btapb.AppProfile, error) { 108 return nil, errUnimplemented 109} 110 111func (s *server) ListAppProfiles(ctx context.Context, req *btapb.ListAppProfilesRequest) (*btapb.ListAppProfilesResponse, error) { 112 return nil, errUnimplemented 113} 114 115func (s *server) UpdateAppProfile(ctx context.Context, req *btapb.UpdateAppProfileRequest) (*longrunning.Operation, error) { 116 return nil, errUnimplemented 117} 118 119func (s *server) DeleteAppProfile(ctx context.Context, req *btapb.DeleteAppProfileRequest) (*empty.Empty, error) { 120 return nil, errUnimplemented 121} 122 123func (s *server) GetIamPolicy(ctx context.Context, req *iampb.GetIamPolicyRequest) (*iampb.Policy, error) { 124 return nil, errUnimplemented 125} 126 127func (s *server) SetIamPolicy(ctx context.Context, req *iampb.SetIamPolicyRequest) (*iampb.Policy, error) { 128 return nil, errUnimplemented 129} 130 131func (s *server) TestIamPermissions(ctx context.Context, req *iampb.TestIamPermissionsRequest) (*iampb.TestIamPermissionsResponse, error) { 132 return nil, errUnimplemented 133} 134