diff --git a/api/api_test.go b/api/api_test.go index 2a98af6fda7c713290f5f2f57d8cf3d982cffa9d..3d9c16efbf8b41bea17346dae5e19ccac0adb943 100644 --- a/api/api_test.go +++ b/api/api_test.go @@ -15,6 +15,7 @@ import ( "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" "github.com/google/uuid" log "github.com/sirupsen/logrus" + "github.com/spf13/viper" "github.com/stretchr/testify/mock" "google.golang.org/grpc" "google.golang.org/grpc/test/bufconn" @@ -99,6 +100,7 @@ func bufDialer(context.Context, string) (net.Conn, error) { } func Test_Init(t *testing.T) { + viper.SetConfigFile("./api_test.toml") if err := Init(bufnet); err != nil { t.Error(err) } @@ -136,7 +138,7 @@ func Test_GetPnd(t *testing.T) { } func Test_GetChanges(t *testing.T) { - resp, err := GetChanges(bufnet, pndID) + resp, err := getChanges(bufnet, pndID) if err != nil { t.Error(err) return @@ -145,14 +147,14 @@ func Test_GetChanges(t *testing.T) { } func Test_CommitConfirm(t *testing.T) { - resp, err := Commit(bufnet, pndID, changeID) + resp, err := commit(bufnet, pndID, changeID) if err != nil { t.Error(err) return } log.Info(resp) - resp, err = Confirm(bufnet, pndID, changeID) + resp, err = confirm(bufnet, pndID, changeID) if err != nil { t.Error(err) return @@ -179,7 +181,7 @@ func Test_AddDevice(t *testing.T) { } func Test_GetDevice(t *testing.T) { - resp, err := getDevice(bufnet, pndID, "", ondID) + resp, err := getDevice(bufnet, pndID, ondID) if err != nil { t.Error(err) return diff --git a/api/go.mod b/api/go.mod index 9f73ad45018ef7a278f7bffde00ee5812dd97de1..551e38da5afd80810c840d6a10e7f45a48936844 100644 --- a/api/go.mod +++ b/api/go.mod @@ -3,7 +3,7 @@ module code.fbi.h-da.de/cocsn/gosdn/api go 1.16 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/interfaces v0.0.0-20210616220833-9f9d4a562783 code.fbi.h-da.de/cocsn/yang-models v0.0.7 diff --git a/api/go.sum b/api/go.sum index 7729383f2e825c3fc6d31ab2efc08f291a77b2f8..834132dd2ce8af8a12def42d14cdfa0454864e5e 100644 --- a/api/go.sum +++ b/api/go.sum @@ -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= 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-20210617113324-57ce62926b53 h1:fESX2L9ql6DeJo98Q+Yz99c+2yrQ0YoxotGKAmPlGiw= -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 h1:pNZ+M0wzJocRP3HXx9NMw042/mvTRrobRspqG3gNTfw= +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/go.mod h1:EK0GUnwNB+qMMjSJxGzLpfDw+KsUHS2LZkdzshldm4Q= code.fbi.h-da.de/cocsn/gosdn/interfaces v0.0.0-20210616220833-9f9d4a562783 h1:7ewcRJE+p8p7nJEB5qiGwREcV60UlWB42aXEtaywJuE= diff --git a/api/pnd.go b/api/pnd.go index e83facbb6c583e357336c52932364b5e03eaab55..60d3f87f8725dfc8ed3fab97d768b1bd9e2c00a2 100644 --- a/api/pnd.go +++ b/api/pnd.go @@ -96,8 +96,13 @@ func (p *PrincipalNetworkDomainAdapter) ChangeOND(uuid uuid.UUID, operation ppb. return err } -func (p *PrincipalNetworkDomainAdapter) Request(uuid.UUID, string) error { - return &errors.ErrNotYetImplemented{} +func (p *PrincipalNetworkDomainAdapter) Request(did uuid.UUID, path string) error { + 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 { @@ -129,27 +134,58 @@ func (p *PrincipalNetworkDomainAdapter) ID() 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 { - 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) { return nil, &errors.ErrNotYetImplemented{} } -func (p *PrincipalNetworkDomainAdapter) Commit(uuid.UUID) error { - return &errors.ErrNotYetImplemented{} +func (p *PrincipalNetworkDomainAdapter) Commit(cuid uuid.UUID) error { + 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 { - return &errors.ErrNotYetImplemented{} +func (p *PrincipalNetworkDomainAdapter) Confirm(cuid uuid.UUID) error { + 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 -func GetChanges(addr, pnd string) (*ppb.GetResponse, error) { +// getChanges requests all pending and unconfirmed changes from the controller +func getChanges(addr, pnd string) (*ppb.GetResponse, error) { ctx := context.Background() client, err := nbi.PndClient(addr, dialOptions...) if err != nil { @@ -167,9 +203,9 @@ func GetChanges(addr, pnd string) (*ppb.GetResponse, error) { 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. -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)) for i, arg := range cuids { changes[i] = &ppb.SetChange{ @@ -180,9 +216,9 @@ func Commit(addr, pnd string, cuids ...string) (*ppb.SetResponse, error) { 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 -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)) for i, arg := range cuids { changes[i] = &ppb.SetChange{ @@ -266,6 +302,26 @@ func getDevice(addr, pid string, did ...string) (*ppb.GetResponse, error) { 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) { pndClient, err := nbi.PndClient(addr, dialOptions...) if err != nil {