Giter Club home page Giter Club logo

go-orbit-db's Introduction

Berty

Berty is an open, secure, offline-first, peer-to-peer and zero trust messaging app

berty.tech discord github twitter

GoDoc GitHub release CodeFactor


TLDR : Install it!

Mobile

To use the latest released version, install it from Google Play or Apple App Store.

To compile and run the mobile application on your device, see js/README.md.

CLI

You can go run or go install the CLI tool located in go/cmd/berty. The two main command line utilities are:

  • berty mini: a CLI messaging app using the Wesh Protocol.
  • berty daemon: a full node manageable through the Wesh Protocol API.

Introduction

Warning: Berty is still under active development and should not yet be used to exchange sensitive data.

Berty is a privacy-first messaging application built on top of the Wesh Protocol.

  • Secure and private :
    • Messages are end-to-end encrypted by default
    • Metadata is kept to a minimum
    • No phone number or email address is required to create an account
    • Built to retain its properties even when used on adversarial networks
  • Censorship-resilient
    • Decentralized, distributed, peer-to-peer and serverless
    • No internet connection is required, thanks to BLE technology and mDNS.
  • Open :
    • Free forever and open-source

Berty is designed to be used as a communication tool when all other traditional messengers fail. Berty Messenger serves the following use cases:

  • When you need to share sensitive information over untrusted networks, for instance while traveling
  • If you want to communicate anonymously
  • If you want full control over your data and thus don't want to rely on third-party servers
  • In countries that actively monitor and temper with their network, restricting its use and censoring some of its contents
  • In areas with weak or no connection at all

Berty is currently developed by Berty Technologies, a French nonprofit organization.

Note: this project is led by a small team made of humans, who make mistakes. Please do not hesitate to point out bugs or missing features. See the contribute section below.

We cannot promise we will offer you the best application, but we dedicate ourselves to doing our best to create a great one.

The philosophy behind Berty

We want to contribute to a world where free and secure communications are common and fear of censorship or surveillance are not.

We believe that open-source is more secure, as anyone can examine the code and improve it: this is why we rely on and build open and free software.

As the founding team, our ultimate goal is to progressively relinquish control over Berty and to make it become a truly global community project.

More info on berty/community.

Development Status

The current Berty implementation is using the Wesh Protocol, which means the encryption technique is safe, and it works as a peer-to-peer app!

Alas, Berty has not yet been hardened, so please avoid using it on devices with weak sandboxes, such as unpatchable devices that use old Android versions.

The current Wesh Protocol is partially implemented.

The API will continue to evolve in the near future. As such, we cannot yet guarantee none-breaking changes, or any kind of API stability. Be prepared for a rough ride if you start rolling the Wesh Protocol in your application.

Subscribe to our newsletter if you wish to be notified about the latest features and releases.

Note: The repositories are being opened progressively, and there will be additional modifications and updates soon.

Under the hood

Berty Messenger High Level Architecture

Wesh Protocol

go.dev reference Code coverage

The Wesh Protocol comes with a generic, but full-featured SDK allowing developers to write peer-to-peer applications. You can just focus on high-level features for your app, we will take care of the rest (encryption, identities, network routing, group management, account management, device management, application lifecycle).

The main concept of the Wesh Protocol is called the "group", a virtual place where multiple devices can share messages and metadata using OrbitDB, which itself relies on the InterPlanetary File System (IPFS)

Get it:

git clone https://github.com/berty/berty

The Berty Messenger

Code coverage

The Berty Messenger, or simply Berty, is a messaging application written in React Native, that uses the Wesh Protocol through gomobile-ipfs, which, in turns, is using gomobile.

Main items in the repo

  • ./go: Where all the Golang code lies.
  • ./js: Where all the Javascript/Typescript code lies:
    • The Berty Messenger application, written in React Native.
  • ./docs: Mostly auto-generated documentation.

Contributing

Contribute to Berty

We welcome contributions! Your input is deeply appreciated and extremely valuable to us. We thank you in advance for it.

There is no small feat: everyone is encouraged to do what they can to help, based on their ability and interest.

There are plenty of ways to get involved and to help our community, which can roughly be divided in two distinct parts: everything that is related to the code and everything that is not.

To put it simply:

  • Code-related = GitHub
  • Not code-related = Open a task

Everything about contribution is summed up here: CONTRIBUTING.MD

Stargazers over time

Star History Chart

Other resources

Contact

For a direct contact, see our contact page of our website. Alternatively, take a look at our community repository.

Licensing

© 2018-2023 Berty Technologies

Licensed under the Apache License, Version 2.0 (LICENSE-APACHE) or the MIT license (LICENSE-MIT), at your discretion. See the COPYRIGHT file for more details.

go-orbit-db's People

Contributors

aeddi avatar d4ryl00 avatar dependabot[bot] avatar gfanton avatar glouvigny avatar jefft0 avatar jvasile avatar mentos1386 avatar moul avatar n0izn0iz avatar phanhuynhquy avatar tariqp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-orbit-db's Issues

Missing mutex unlock in channelHolder.incomingConnHandler()

Found small issue when review in below function when stream's protocol is not registered before

func (h *channelHolder) incomingConnHandler(stream network.Stream) {
	h.muExpected.Lock()

	ch, ok := h.expectedPID[stream.Protocol()]
	if !ok {
                // => Missing unlock in this case
		return
	}

	h.muExpected.Unlock()

	ch <- stream
}

Also consider function (c *channel) Send(ctx context.Context, bytes []byte)
There is no mutex to protect in between two writes :

        if _, err := stream.Write(b); err != nil {
		return err
	}

	_, err := stream.Write(bytes)
	return err

Local database not persisted

I am using the go-orbit-db implementation to persist data outside the browser. When I put and get in the same instance it does work. If I end the session and open a new one the data is not there.

What am I missing?

oneonone/channel.go:74","msg":"unable to connect to remote peer"

oneonone/channel.go 74 line

if err := c.ipfs.Swarm().Connect(ctx, peer.AddrInfo{ID: target}); err != nil {
		c.logger.Warn("unable to connect to remote peer", zap.String("peer", target.String()))
}

peer.AddrInfo has 2 params.Only one param cause "argument "address" is required' bug。

Open blocks/hangs

This is the code that I'm using:

    log.Println("Opening OrbitDB as reader ...")
    orbitdb1, err = orbitdb.NewOrbitDB(ctx, ipfs, &orbitdb.NewOrbitDBOptions{
      Directory: &orbitDir,
    })
    if err != nil {
      log.Println(err)
      return
    }
    log.Println("NewOrbitDB succeeded")
    create := true
    storetype := "docstore"
    dbstore, err := orbitdb1.Open(ctx, testid, &orbitdb.CreateDBOptions{Create: &create, StoreType: &storetype})
    if err != nil {
      log.Println(err)
      return
    }
    db1 = dbstore.(orbitdb.DocumentStore)

I'm trying to open an OrbitDB that a different node created. testid contains a valid /orbitdb/<hash>/<dbname> URI. When I run this code, it seems to be stuck at .Open(...) and won't return.

go get error

go get -u berty.tech/go-orbit-db
# github.com/libp2p/go-libp2p-core/crypto
/opt/lib/go/src/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go:36:36: too many arguments in call to btcec.NewPrivateKey
/opt/lib/go/src/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go:62:51: too many arguments in call to btcec.PrivKeyFromBytes
/opt/lib/go/src/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go:72:36: too many arguments in call to btcec.ParsePubKey
/opt/lib/go/src/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go:124:37: (*btcec.PrivateKey)(k).Sign undefined (type *secp256k1.PrivateKey has no field or method Sign)
/opt/lib/go/src/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go:182:20: undefined: btcec.ParseDERSignature
# github.com/ipfs/go-ipfs-blockstore
/opt/lib/go/src/github.com/ipfs/go-ipfs-blockstore/bloom_cache.go:159:13: log.EventBegin undefined (type *log.ZapEventLogger has no field or method EventBegin)

Implement HTTP API (or grpc)

Is there an existing issue for this?

  • I have searched the existing issues

Feature request

I am suggestin adding a HTTP or gRPC API interface so that we can use go-orbit-db from any programming/scripting language.

Context

It would be nice to be able to use this project from any programming language, not just Go.
orbitdb and its http api has fallen out of maintenance, you can only use it with ancient ipfs versions.

Possible implementation

No response

some question about replication, delete data entity, and access over intertnet

1, does support replicaiton among nodes? If yes, will it sync all data to all node? or have replication factor, for example, factor is 5, then data will repliction to 5 node?
2, orbit-db base on ipfs-log, it's Append-only log, It can't delete data entity, does go-orbit-db can delete entity?
3, over global internet, can it write one node and read another node ?
thanks.

orbitdb vs go-ds-crdt

Asking a question, not reporting a bug

  • This question is not about a bug

Is there an existing issue for this?

  • I have searched the existing issues

Question

hi, I was wondering if you team has seen / explored https://github.com/ipfs/go-ds-crdt ? It has a similar merkle crdt design and achieves similar properties by leverages IPLD. I was wondering if anyone has explored it, if they have any thoughts on pros/cons for approaches..?

Context

deciding between libraries / approaches

Problem on install

I'm trying to install, but I get this error.

$ go get berty.tech/go-orbit-db
# github.com/ipfs/go-ipfs-blockstore
../../.go/src/github.com/ipfs/go-ipfs-blockstore/bloom_cache.go:90:12: log.EventBegin undefined (type *log.ZapEventLogger has no field or method EventBegin)

PS: I'm newbie in Golang

Nodes do not receive data

Hi all.
For a long time, I use OrbitDb as a sync transport. So, today I found that some nodes do not receive any data that has been published a few minutes ago.
In my case, there are 3 nodes that publish entries in an endless loop, and in the end, it turns out that one node does not receive any data.
Please help solve this problem and tell me please what could be the problem?

help

Hi foe every one
How to use go-orbit-db with blockchain application (hyperledger fabric )
Thanks

Upgrade kubo

Is there an existing issue for this?

  • I have searched the existing issues

Feature request

Do we have a plan to update the kubo, it's a bit too old.

Context

Do we have a plan to update the kubo, it's a bit too old.

Possible implementation

No response

Database not syncing anymore since bump to IPFS 12.2

It seems like ever since the upgrade to IPFS 12.2 that came with v1.17.0 the database won't sync with peers anymore. I tested it by setting up two peers on a two different machines and none of them are in sync with each other even though they all access the same database URI. I'm still investigating the issue but so far I couldn't find anything obvious in the logs that would tell what's going on.

why not exchange remote head

rawLocalHeads, err := store.Cache().Get(ctx, datastore.NewKey("_localHeads"))

add a local head in one node and other nodes sync this of remote head。If I stop these nodes that have local head and run a new node。Other nodes that only have remote heads do not sync their remote head。So the new node that I run do not receive head and sync data from ipfs。

v1.14.1 -> v1.16.0, no more *stores.EventReady event?

I'm experiencing an issue in one of my projects, in which I've upgraded from v1.14.1 to v1.15.1 and I don't seem to be getting the *stores.EventReady event anymore from the documentstore that I'm using.

Did something change / is there a replacement for this event? Thank you.

Test failed when run all tests repeatedly

when run all tests repeatedly like
go test -race -count=100 -v ./... 2>&1 | tee test_output.txt

There are several issues: (see test_report.zip for logs)

1. test timed out (maybe golang test error)

  • === RUN TestPersistence
    === RUN TestPersistence/loads_database_from_local_cache
    === RUN TestPersistence/loads_database_partially
    === RUN TestPersistence/load_and_close_several_times
    === RUN TestPersistence/closes_database_while_loading
    === RUN TestPersistence/load,_add_one,close-_several_times
    panic: test timed out after 10m0s

2. TestReplication/replicates_database_of_10_entries_with_node_type_default failed

=== RUN TestReplication/replicates_database_of_1_entries_with_node_type_direct-channel
=== RUN TestReplication/replicates_database_of_10_entries_with_node_type_default
replicate_test.go:78:
Error Trace: replicate_test.go:78
replicate_test.go:201
Error: Not equal:
expected: 10
actual : 9
Test: TestReplication/replicates_database_of_10_entries_with_node_type_default
=== RUN TestReplication/replicates_database_of_10_entries_with_node_type_direct-channel
=== RUN TestReplication/replicates_database_of_10_entries_with_node_type_raw-pubsub
--- FAIL: TestReplication (38.79s)
--- PASS: TestReplication/replicates_database_of_1_entries_with_node_type_raw-pubsub (7.88s)
--- PASS: TestReplication/replicates_database_of_1_entries_with_node_type_default (5.24s)
--- PASS: TestReplication/replicates_database_of_1_entries_with_node_type_direct-channel (3.41s)
--- FAIL: TestReplication/replicates_database_of_10_entries_with_node_type_default (11.70s)

PS:
coveragereport:
coverage.zip

Using orbit and pubsub in the same run causes race conditions

Scenario:

  1. Orbit put
  2. Pubsub publish before/after
  3. Every 5 requests the orbit put request gets stuck in pending state

What I have tried so far:

  1. Invoke them in separate goroutines
  2. Implement time sleep between them
  3. Change the order of invokation

None of those seem to get passed the 6th request.

Has anyone faced the same issue?

Can not install go-orbit-db

Hi @moul

I am trying to install github.com/berty/go-orbit-db by the command
go get github.com/berty/go-orbit-db
and as a response I am getting an error look like this

go: github.com/berty/[email protected]: parsing go.mod: unexpected module path "berty.tech/go-orbit-db"
go: error loading module requirements

I also tried to get package by the command
go get -u github.com/berty/go-orbit-db@master
and also got the same error.

Can you help me solve this issue ?

Inconsistent failing test(s)

https://github.com/berty/go-orbit-db/pull/54/checks?check_run_id=881357563

feeling: happens "rarely" (1/100)

=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
    TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync: replication_status_test.go:146: 
        	Error Trace:	replication_status_test.go:146
        	Error:      	Not equal: 
        	            	expected: 0
        	            	actual  : 2
        	Test:       	TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_loading_from_snapshot
--- FAIL: TestReplicationStatus (7.69s)
    --- PASS: TestReplicationStatus/has_correct_initial_state (1.00s)
    --- FAIL: TestReplicationStatus/has_correct_replication_info_after_load (6.70s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_close (0.28s)
        --- FAIL: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (5.82s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_loading_from_snapshot (0.59s)
=== RUN   TestWritePermissions

edit 1: another test locally

$ go test ./tests/ -run TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync -count 101
--- FAIL: TestReplicationStatus (5.34s)
    --- FAIL: TestReplicationStatus/has_correct_replication_info_after_load (5.34s)
        --- FAIL: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (5.34s)
            replication_status_test.go:145:
                        Error Trace:    replication_status_test.go:145
                        Error:          Not equal:
                                        expected: -1
                                        actual  : 0
                        Test:           TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
FAIL
FAIL    berty.tech/go-orbit-db/tests    52.385s
FAIL

edit 2: another test

$ go test ./tests/ -v -run TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync -count 101
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.47s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.47s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.47s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.43s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.43s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.43s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.37s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.37s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.36s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.85s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.85s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.85s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.53s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.53s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.53s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.72s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.72s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.72s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.39s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.39s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.39s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.63s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.63s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.63s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.44s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.44s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.44s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.32s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.32s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.32s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.32s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.32s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.32s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.47s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.47s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.47s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.46s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.46s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.46s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.40s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.40s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.40s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.57s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.57s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.57s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.62s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.62s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.62s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.49s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.49s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.49s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.75s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.75s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.75s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.49s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.49s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.49s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.36s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.36s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.36s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.76s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.76s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.76s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.39s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.39s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.39s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.33s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.33s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.33s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.53s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.53s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.53s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.60s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.60s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.60s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.46s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.46s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.46s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.60s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.60s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.60s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.52s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.52s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.52s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- PASS: TestReplicationStatus (0.38s)
    --- PASS: TestReplicationStatus/has_correct_replication_info_after_load (0.38s)
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.38s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
[...]
        --- PASS: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (0.51s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
    TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync: replication_status_test.go:146:
                Error Trace:    replication_status_test.go:146
                Error:          Not equal:
                                expected: 0
                                actual  : 2
                Test:           TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync
--- FAIL: TestReplicationStatus (5.47s)
    --- FAIL: TestReplicationStatus/has_correct_replication_info_after_load (5.47s)
        --- FAIL: TestReplicationStatus/has_correct_replication_info_after_load/has_correct_replication_info_after_sync (5.47s)
=== RUN   TestReplicationStatus
=== RUN   TestReplicationStatus/has_correct_replication_info_after_load
[...]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.