| /* |
| Copyright 2014 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package registrytest |
| |
| import ( |
| "context" |
| "sync" |
| |
| "k8s.io/apimachinery/pkg/api/errors" |
| metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" |
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| "k8s.io/apimachinery/pkg/watch" |
| api "k8s.io/kubernetes/pkg/apis/core" |
| ) |
| |
| // NodeRegistry implements node.Registry interface. |
| type NodeRegistry struct { |
| Err error |
| Node string |
| Nodes api.NodeList |
| |
| sync.Mutex |
| } |
| |
| // MakeNodeList constructs api.NodeList from list of node names and a NodeResource. |
| func MakeNodeList(nodes []string, nodeResources api.ResourceList) *api.NodeList { |
| list := api.NodeList{ |
| Items: make([]api.Node, len(nodes)), |
| } |
| for i := range nodes { |
| list.Items[i].Name = nodes[i] |
| list.Items[i].Status.Capacity = nodeResources |
| } |
| return &list |
| } |
| |
| func (r *NodeRegistry) SetError(err error) { |
| r.Lock() |
| defer r.Unlock() |
| r.Err = err |
| } |
| |
| func (r *NodeRegistry) ListNodes(ctx context.Context, options *metainternalversion.ListOptions) (*api.NodeList, error) { |
| r.Lock() |
| defer r.Unlock() |
| return &r.Nodes, r.Err |
| } |
| |
| func (r *NodeRegistry) CreateNode(ctx context.Context, node *api.Node) error { |
| r.Lock() |
| defer r.Unlock() |
| r.Node = node.Name |
| r.Nodes.Items = append(r.Nodes.Items, *node) |
| return r.Err |
| } |
| |
| func (r *NodeRegistry) UpdateNode(ctx context.Context, node *api.Node) error { |
| r.Lock() |
| defer r.Unlock() |
| for i, item := range r.Nodes.Items { |
| if item.Name == node.Name { |
| r.Nodes.Items[i] = *node |
| return r.Err |
| } |
| } |
| return r.Err |
| } |
| |
| func (r *NodeRegistry) GetNode(ctx context.Context, nodeID string, options *metav1.GetOptions) (*api.Node, error) { |
| r.Lock() |
| defer r.Unlock() |
| if r.Err != nil { |
| return nil, r.Err |
| } |
| for _, node := range r.Nodes.Items { |
| if node.Name == nodeID { |
| return &node, nil |
| } |
| } |
| return nil, errors.NewNotFound(api.Resource("nodes"), nodeID) |
| } |
| |
| func (r *NodeRegistry) DeleteNode(ctx context.Context, nodeID string) error { |
| r.Lock() |
| defer r.Unlock() |
| var newList []api.Node |
| for _, node := range r.Nodes.Items { |
| if node.Name != nodeID { |
| newList = append(newList, api.Node{ObjectMeta: metav1.ObjectMeta{Name: node.Name}}) |
| } |
| } |
| r.Nodes.Items = newList |
| return r.Err |
| } |
| |
| func (r *NodeRegistry) WatchNodes(ctx context.Context, options *metainternalversion.ListOptions) (watch.Interface, error) { |
| r.Lock() |
| defer r.Unlock() |
| return nil, r.Err |
| } |