Skip to content
Snippets Groups Projects
Commit 8eb358d9 authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

pnd adapter basic implementation

parent 74a141c5
No related branches found
No related tags found
1 merge request!168pnd adapter skeleton
Pipeline #76193 passed
This commit is part of merge request !168. Comments created here will be created in the context of that merge request.
...@@ -15,6 +15,7 @@ import ( ...@@ -15,6 +15,7 @@ import (
"code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig"
"github.com/google/uuid" "github.com/google/uuid"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"github.com/stretchr/testify/mock" "github.com/stretchr/testify/mock"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/test/bufconn" "google.golang.org/grpc/test/bufconn"
...@@ -99,6 +100,7 @@ func bufDialer(context.Context, string) (net.Conn, error) { ...@@ -99,6 +100,7 @@ func bufDialer(context.Context, string) (net.Conn, error) {
} }
func Test_Init(t *testing.T) { func Test_Init(t *testing.T) {
viper.SetConfigFile("./api_test.toml")
if err := Init(bufnet); err != nil { if err := Init(bufnet); err != nil {
t.Error(err) t.Error(err)
} }
...@@ -136,7 +138,7 @@ func Test_GetPnd(t *testing.T) { ...@@ -136,7 +138,7 @@ func Test_GetPnd(t *testing.T) {
} }
func Test_GetChanges(t *testing.T) { func Test_GetChanges(t *testing.T) {
resp, err := GetChanges(bufnet, pndID) resp, err := getChanges(bufnet, pndID)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -145,14 +147,14 @@ func Test_GetChanges(t *testing.T) { ...@@ -145,14 +147,14 @@ func Test_GetChanges(t *testing.T) {
} }
func Test_CommitConfirm(t *testing.T) { func Test_CommitConfirm(t *testing.T) {
resp, err := Commit(bufnet, pndID, changeID) resp, err := commit(bufnet, pndID, changeID)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
} }
log.Info(resp) log.Info(resp)
resp, err = Confirm(bufnet, pndID, changeID) resp, err = confirm(bufnet, pndID, changeID)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
...@@ -179,7 +181,7 @@ func Test_AddDevice(t *testing.T) { ...@@ -179,7 +181,7 @@ func Test_AddDevice(t *testing.T) {
} }
func Test_GetDevice(t *testing.T) { func Test_GetDevice(t *testing.T) {
resp, err := getDevice(bufnet, pndID, "", ondID) resp, err := getDevice(bufnet, pndID, ondID)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
return return
......
...@@ -3,7 +3,7 @@ module code.fbi.h-da.de/cocsn/gosdn/api ...@@ -3,7 +3,7 @@ module code.fbi.h-da.de/cocsn/gosdn/api
go 1.16 go 1.16
require ( require (
code.fbi.h-da.de/cocsn/api/go v0.0.0-20210617113324-57ce62926b53 code.fbi.h-da.de/cocsn/api/go v0.0.0-20210617162200-4b2e8d3035c7
code.fbi.h-da.de/cocsn/gosdn v0.0.3-0.20210609130706-9cca50b3d195 code.fbi.h-da.de/cocsn/gosdn v0.0.3-0.20210609130706-9cca50b3d195
code.fbi.h-da.de/cocsn/gosdn/interfaces v0.0.0-20210616220833-9f9d4a562783 code.fbi.h-da.de/cocsn/gosdn/interfaces v0.0.0-20210616220833-9f9d4a562783
code.fbi.h-da.de/cocsn/yang-models v0.0.7 code.fbi.h-da.de/cocsn/yang-models v0.0.7
......
...@@ -23,8 +23,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo ...@@ -23,8 +23,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
code.fbi.h-da.de/cocsn/api/go v0.0.0-20210609120033-1ef56612bd26/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0= code.fbi.h-da.de/cocsn/api/go v0.0.0-20210609120033-1ef56612bd26/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0=
code.fbi.h-da.de/cocsn/api/go v0.0.0-20210616091959-ec840cb65202/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0= code.fbi.h-da.de/cocsn/api/go v0.0.0-20210616091959-ec840cb65202/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0=
code.fbi.h-da.de/cocsn/api/go v0.0.0-20210617113324-57ce62926b53 h1:fESX2L9ql6DeJo98Q+Yz99c+2yrQ0YoxotGKAmPlGiw= code.fbi.h-da.de/cocsn/api/go v0.0.0-20210617162200-4b2e8d3035c7 h1:pNZ+M0wzJocRP3HXx9NMw042/mvTRrobRspqG3gNTfw=
code.fbi.h-da.de/cocsn/api/go v0.0.0-20210617113324-57ce62926b53/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0= code.fbi.h-da.de/cocsn/api/go v0.0.0-20210617162200-4b2e8d3035c7/go.mod h1:2+rnE92IyXLbiy3/92EM7JrtsY5tXPAKX90QmsT2+m0=
code.fbi.h-da.de/cocsn/gosdn v0.0.3-0.20210609130706-9cca50b3d195 h1:PKIXDaEtaqmGviMAx4RWK0/bgPgkCNcxKO+XC85lnIg= code.fbi.h-da.de/cocsn/gosdn v0.0.3-0.20210609130706-9cca50b3d195 h1:PKIXDaEtaqmGviMAx4RWK0/bgPgkCNcxKO+XC85lnIg=
code.fbi.h-da.de/cocsn/gosdn v0.0.3-0.20210609130706-9cca50b3d195/go.mod h1:EK0GUnwNB+qMMjSJxGzLpfDw+KsUHS2LZkdzshldm4Q= code.fbi.h-da.de/cocsn/gosdn v0.0.3-0.20210609130706-9cca50b3d195/go.mod h1:EK0GUnwNB+qMMjSJxGzLpfDw+KsUHS2LZkdzshldm4Q=
code.fbi.h-da.de/cocsn/gosdn/interfaces v0.0.0-20210616220833-9f9d4a562783 h1:7ewcRJE+p8p7nJEB5qiGwREcV60UlWB42aXEtaywJuE= code.fbi.h-da.de/cocsn/gosdn/interfaces v0.0.0-20210616220833-9f9d4a562783 h1:7ewcRJE+p8p7nJEB5qiGwREcV60UlWB42aXEtaywJuE=
......
...@@ -96,8 +96,13 @@ func (p *PrincipalNetworkDomainAdapter) ChangeOND(uuid uuid.UUID, operation ppb. ...@@ -96,8 +96,13 @@ func (p *PrincipalNetworkDomainAdapter) ChangeOND(uuid uuid.UUID, operation ppb.
return err return err
} }
func (p *PrincipalNetworkDomainAdapter) Request(uuid.UUID, string) error { func (p *PrincipalNetworkDomainAdapter) Request(did uuid.UUID, path string) error {
return &errors.ErrNotYetImplemented{} resp, err := getPath(p.endpoint, p.id.String(), did.String(), path)
if err != nil {
return err
}
log.Info(resp)
return nil
} }
func (p *PrincipalNetworkDomainAdapter) RequestAll(string) error { func (p *PrincipalNetworkDomainAdapter) RequestAll(string) error {
...@@ -129,27 +134,58 @@ func (p *PrincipalNetworkDomainAdapter) ID() uuid.UUID { ...@@ -129,27 +134,58 @@ func (p *PrincipalNetworkDomainAdapter) ID() uuid.UUID {
} }
func (p *PrincipalNetworkDomainAdapter) PendingChanges() []uuid.UUID { func (p *PrincipalNetworkDomainAdapter) PendingChanges() []uuid.UUID {
return nil resp, err := getChanges(p.endpoint, p.id.String())
if err != nil {
log.Error(err)
return nil
}
return filterChanges(ppb.Change_PENDING, resp)
} }
func (p *PrincipalNetworkDomainAdapter) CommittedChanges() []uuid.UUID { func (p *PrincipalNetworkDomainAdapter) CommittedChanges() []uuid.UUID {
return nil resp, err := getChanges(p.endpoint, p.id.String())
if err != nil {
log.Error(err)
return nil
}
return filterChanges(ppb.Change_COMMITTED, resp)
} }
func (p *PrincipalNetworkDomainAdapter) GetChange(uuid.UUID, ...int) (change.Change, error) { func (p *PrincipalNetworkDomainAdapter) GetChange(uuid.UUID, ...int) (change.Change, error) {
return nil, &errors.ErrNotYetImplemented{} return nil, &errors.ErrNotYetImplemented{}
} }
func (p *PrincipalNetworkDomainAdapter) Commit(uuid.UUID) error { func (p *PrincipalNetworkDomainAdapter) Commit(cuid uuid.UUID) error {
return &errors.ErrNotYetImplemented{} resp, err := commit(p.endpoint, p.id.String(), cuid.String())
if err != nil {
return err
}
log.Info(resp)
return nil
} }
func (p *PrincipalNetworkDomainAdapter) Confirm(uuid.UUID) error { func (p *PrincipalNetworkDomainAdapter) Confirm(cuid uuid.UUID) error {
return &errors.ErrNotYetImplemented{} resp, err := confirm(p.endpoint, p.id.String(), cuid.String())
if err != nil {
return err
}
log.Info(resp)
return nil
}
func filterChanges(state ppb.Change_State, resp *ppb.GetResponse) []uuid.UUID {
changes := make([]uuid.UUID, 0)
for _, ch := range resp.Change {
if ch.State == ppb.Change_PENDING {
id, _ := uuid.Parse(ch.Id)
changes = append(changes, id)
}
}
return changes
} }
// GetChanges requests all pending and unconfirmed changes from the controller // getChanges requests all pending and unconfirmed changes from the controller
func GetChanges(addr, pnd string) (*ppb.GetResponse, error) { func getChanges(addr, pnd string) (*ppb.GetResponse, error) {
ctx := context.Background() ctx := context.Background()
client, err := nbi.PndClient(addr, dialOptions...) client, err := nbi.PndClient(addr, dialOptions...)
if err != nil { if err != nil {
...@@ -167,9 +203,9 @@ func GetChanges(addr, pnd string) (*ppb.GetResponse, error) { ...@@ -167,9 +203,9 @@ func GetChanges(addr, pnd string) (*ppb.GetResponse, error) {
return client.Get(ctx, req) return client.Get(ctx, req)
} }
// Commit sends a commit request for one or multiple changes to the // commit sends a commit request for one or multiple changes to the
// controller. // controller.
func Commit(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) { func commit(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) {
changes := make([]*ppb.SetChange, len(cuids)) changes := make([]*ppb.SetChange, len(cuids))
for i, arg := range cuids { for i, arg := range cuids {
changes[i] = &ppb.SetChange{ changes[i] = &ppb.SetChange{
...@@ -180,9 +216,9 @@ func Commit(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) { ...@@ -180,9 +216,9 @@ func Commit(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) {
return commitConfirm(addr, pnd, changes) return commitConfirm(addr, pnd, changes)
} }
// Confirm sends a confirm request for one or multiple changes to the // confirm sends a confirm request for one or multiple changes to the
// controller // controller
func Confirm(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) { func confirm(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) {
changes := make([]*ppb.SetChange, len(cuids)) changes := make([]*ppb.SetChange, len(cuids))
for i, arg := range cuids { for i, arg := range cuids {
changes[i] = &ppb.SetChange{ changes[i] = &ppb.SetChange{
...@@ -266,6 +302,26 @@ func getDevice(addr, pid string, did ...string) (*ppb.GetResponse, error) { ...@@ -266,6 +302,26 @@ func getDevice(addr, pid string, did ...string) (*ppb.GetResponse, error) {
return pndClient.Get(ctx, req) return pndClient.Get(ctx, req)
} }
func getPath(addr, pid, did, path string) (*ppb.GetResponse, error) {
pndClient, err := nbi.PndClient(addr, dialOptions...)
if err != nil {
return nil, err
}
req := &ppb.GetRequest{
Timestamp: time.Now().UnixNano(),
Request: &ppb.GetRequest_Path{
Path: &ppb.GetPath{
Did: did,
Path: path,
},
},
Pid: pid,
}
ctx := context.Background()
return pndClient.Get(ctx, req)
}
func deleteDevice(addr, pid, did string) (*ppb.DeleteResponse, error) { func deleteDevice(addr, pid, did string) (*ppb.DeleteResponse, error) {
pndClient, err := nbi.PndClient(addr, dialOptions...) pndClient, err := nbi.PndClient(addr, dialOptions...)
if err != nil { if err != nil {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment