Unverified Commit f976af7b authored by Michael Muré's avatar Michael Muré Committed by Michael Muré

feat: make the CoreAPI expose a streaming pin interface

parent 7bbf5bb0
......@@ -14,6 +14,9 @@ type Pin interface {
// Type of the pin
Type() string
// if not nil, an error happened. Everything else should be ignored.
Err() error
}
// PinStatus holds information about pin health
......@@ -41,7 +44,7 @@ type PinAPI interface {
Add(context.Context, path.Path, ...options.PinAddOption) error
// Ls returns list of pinned objects on this node
Ls(context.Context, ...options.PinLsOption) ([]Pin, error)
Ls(context.Context, ...options.PinLsOption) (<-chan Pin, error)
// Rm removes pin for object specified by the path
Rm(context.Context, path.Path, ...options.PinRmOption) error
......
......@@ -225,7 +225,7 @@ func (tp *TestSuite) TestBlockPin(t *testing.T) {
t.Fatal(err)
}
pins, err := api.Pin().Ls(ctx)
pins, err := accPins(api.Pin().Ls(ctx))
if err != nil {
return
}
......
......@@ -67,7 +67,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) {
t.Fatal(err)
}
list, err := api.Pin().Ls(ctx)
list, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
......@@ -89,7 +89,7 @@ func (tp *TestSuite) TestPinSimple(t *testing.T) {
t.Fatal(err)
}
list, err = api.Pin().Ls(ctx)
list, err = accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
......@@ -141,7 +141,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Fatal(err)
}
list, err := api.Pin().Ls(ctx)
list, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
......@@ -150,7 +150,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected pin list len: %d", len(list))
}
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Direct())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Direct()))
if err != nil {
t.Fatal(err)
}
......@@ -163,7 +163,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected path, %s != %s", list[0].Path().String(), path.IpfsPath(nd2.Cid()).String())
}
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Recursive())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Recursive()))
if err != nil {
t.Fatal(err)
}
......@@ -176,7 +176,7 @@ func (tp *TestSuite) TestPinRecursive(t *testing.T) {
t.Errorf("unexpected path, %s != %s", list[0].Path().String(), path.IpldPath(nd3.Cid()).String())
}
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Indirect())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Indirect()))
if err != nil {
t.Fatal(err)
}
......@@ -390,21 +390,21 @@ func getThreeChainedNodes(t *testing.T, ctx context.Context, api iface.CoreAPI,
func assertPinTypes(t *testing.T, ctx context.Context, api iface.CoreAPI, recusive, direct, indirect []cidContainer) {
assertPinLsAllConsistency(t, ctx, api)
list, err := api.Pin().Ls(ctx, opt.Pin.Type.Recursive())
list, err := accPins(api.Pin().Ls(ctx, opt.Pin.Type.Recursive()))
if err != nil {
t.Fatal(err)
}
assertPinCids(t, list, recusive...)
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Direct())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Direct()))
if err != nil {
t.Fatal(err)
}
assertPinCids(t, list, direct...)
list, err = api.Pin().Ls(ctx, opt.Pin.Type.Indirect())
list, err = accPins(api.Pin().Ls(ctx, opt.Pin.Type.Indirect()))
if err != nil {
t.Fatal(err)
}
......@@ -454,7 +454,7 @@ func assertPinCids(t *testing.T, pins []iface.Pin, cids ...cidContainer) {
// assertPinLsAllConsistency verifies that listing all pins gives the same result as listing the pin types individually
func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.CoreAPI) {
t.Helper()
allPins, err := api.Pin().Ls(ctx)
allPins, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
......@@ -485,7 +485,7 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core
}
for typeStr, pinProps := range typeMap {
pins, err := api.Pin().Ls(ctx, pinProps.PinLsOption)
pins, err := accPins(api.Pin().Ls(ctx, pinProps.PinLsOption))
if err != nil {
t.Fatal(err)
}
......@@ -505,3 +505,20 @@ func assertPinLsAllConsistency(t *testing.T, ctx context.Context, api iface.Core
}
}
}
func accPins(pins <-chan iface.Pin, err error) ([]iface.Pin, error) {
if err != nil {
return nil, err
}
var result []iface.Pin
for pin := range pins {
if pin.Err() != nil {
return nil, pin.Err()
}
result = append(result, pin)
}
return result, nil
}
......@@ -542,7 +542,7 @@ func (tp *TestSuite) TestAddPinned(t *testing.T) {
t.Fatal(err)
}
pins, err := api.Pin().Ls(ctx)
pins, err := accPins(api.Pin().Ls(ctx))
if err != nil {
t.Fatal(err)
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment