diff options
author | Janoš Guljaš <janos@users.noreply.github.com> | 2019-03-07 17:07:54 +0800 |
---|---|---|
committer | Anton Evangelatov <anton.evangelatov@gmail.com> | 2019-03-07 17:07:54 +0800 |
commit | eb199f1fc2fc91e40431c5acce61227a95d476bb (patch) | |
tree | 8a31334f1e7dff786d33fd2f7ab0ea8815dddc0e /swarm/storage | |
parent | d45f8d18804ad432a84a677c0813d33dcac3d8f6 (diff) | |
download | go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.tar go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.tar.gz go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.tar.bz2 go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.tar.lz go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.tar.xz go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.tar.zst go-tangerine-eb199f1fc2fc91e40431c5acce61227a95d476bb.zip |
swarm: localstore hasser (#19230)
Diffstat (limited to 'swarm/storage')
-rw-r--r-- | swarm/storage/localstore/mode_has.go | 39 | ||||
-rw-r--r-- | swarm/storage/localstore/mode_has_test.go | 55 |
2 files changed, 94 insertions, 0 deletions
diff --git a/swarm/storage/localstore/mode_has.go b/swarm/storage/localstore/mode_has.go new file mode 100644 index 000000000..90feaceef --- /dev/null +++ b/swarm/storage/localstore/mode_has.go @@ -0,0 +1,39 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package localstore + +import ( + "github.com/ethereum/go-ethereum/swarm/chunk" +) + +// Hasser provides Has method to retrieve Chunks +// from database. +type Hasser struct { + db *DB +} + +// NewHasser returns a new Hasser on database. +func (db *DB) NewHasser() *Hasser { + return &Hasser{ + db: db, + } +} + +// Has returns true if the chunk is stored in database. +func (h *Hasser) Has(addr chunk.Address) (bool, error) { + return h.db.retrievalDataIndex.Has(addressToItem(addr)) +} diff --git a/swarm/storage/localstore/mode_has_test.go b/swarm/storage/localstore/mode_has_test.go new file mode 100644 index 000000000..332616ca2 --- /dev/null +++ b/swarm/storage/localstore/mode_has_test.go @@ -0,0 +1,55 @@ +// Copyright 2019 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. + +package localstore + +import ( + "testing" +) + +// TestHas validates that Hasser is returning true for +// the stored chunk and false for one that is not stored. +func TestHas(t *testing.T) { + db, cleanupFunc := newTestDB(t, nil) + defer cleanupFunc() + + chunk := generateTestRandomChunk() + + err := db.NewPutter(ModePutUpload).Put(chunk) + if err != nil { + t.Fatal(err) + } + + hasser := db.NewHasser() + + has, err := hasser.Has(chunk.Address()) + if err != nil { + t.Fatal(err) + } + if !has { + t.Error("chunk not found") + } + + missingChunk := generateTestRandomChunk() + + has, err = hasser.Has(missingChunk.Address()) + if err != nil { + t.Fatal(err) + } + if has { + t.Error("unexpected chunk is found") + } +} |