diff --git a/.gitignore b/.gitignore index 1c96bb4f..355c8ec7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ # Files from IDE *.idea/ +*.vscode/ \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index cac2c022..abc4ab91 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -80,6 +80,15 @@ jobs: LATEST: FABRIC_VERSION: 'latest' INTERGATION_CASE: 'ANDLogic' + LATEST_ORLogic: + FABRIC_VERSION: 'latest' + INTERGATION_CASE: 'ORLogic' + LATEST_COMMITONLY: + FABRIC_VERSION: 'latest' + INTERGATION_CASE: 'COMMITONLY' + LATEST_ENODRSEMENTONLY: + FABRIC_VERSION: 'latest' + INTERGATION_CASE: 'ENDORSEMNTONLY' steps: - script: make integration-test FABRIC_VERSION=$(FABRIC_VERSION) INTERGATION_CASE=$(INTERGATION_CASE) diff --git a/cmd/tape/main.go b/cmd/tape/main.go index a7c0f06c..df3d118f 100644 --- a/cmd/tape/main.go +++ b/cmd/tape/main.go @@ -24,7 +24,22 @@ var ( rate = run.Flag("rate", "[Optional] Creates tx rate, default 0 as unlimited").Default("0").Float64() burst = run.Flag("burst", "[Optional] Burst size for Tape, should bigger than rate").Default("1000").Int() signerNumber = run.Flag("signers", "[Optional] signer parallel Number for Tape, default as 5").Default("5").Int() - version = app.Command("version", "Show version information") + + version = app.Command("version", "Show version information") + + commitOnly = app.Command("commitOnly", "Start tape with commitOnly mode, starts dummy envelop ends with peer events") + commitcon = commitOnly.Flag("config", "Path to config file").Required().Short('c').String() + commitnum = commitOnly.Flag("number", "Number of tx for shot").Required().Short('n').Int() + commitrate = commitOnly.Flag("rate", "[Optional] Creates tx rate, default 0 as unlimited").Default("0").Float64() + commitburst = commitOnly.Flag("burst", "[Optional] Burst size for Tape, should bigger than rate").Default("1000").Int() + commitsignerNumber = commitOnly.Flag("signers", "[Optional] signer parallel Number for Tape, default as 5").Default("5").Int() + + endorsementOnly = app.Command("endorsementOnly", "Start tape with endorsementOnly mode, starts endorsement and end") + endorsementcon = endorsementOnly.Flag("config", "Path to config file").Required().Short('c').String() + endorsementnum = endorsementOnly.Flag("number", "Number of tx for shot").Required().Short('n').Int() + endorsementrate = endorsementOnly.Flag("rate", "[Optional] Creates tx rate, default 0 as unlimited").Default("0").Float64() + endorsementburst = endorsementOnly.Flag("burst", "[Optional] Burst size for Tape, should bigger than rate").Default("1000").Int() + endorsementsignerNumber = endorsementOnly.Flag("signers", "[Optional] signer parallel Number for Tape, default as 5").Default("5").Int() ) func main() { @@ -42,8 +57,14 @@ func main() { switch fullCmd { case version.FullCommand(): fmt.Printf(cmdImpl.GetVersionInfo()) + case commitOnly.FullCommand(): + checkArgs(commitrate, commitburst, commitsignerNumber, logger) + err = cmdImpl.ProcessCommitOnly(*commitcon, *commitnum, *commitburst, *commitsignerNumber, *commitrate, logger) + case endorsementOnly.FullCommand(): + checkArgs(endorsementrate, endorsementburst, endorsementsignerNumber, logger) + err = cmdImpl.ProcessEndorsementOnly(*endorsementcon, *endorsementnum, *endorsementburst, *endorsementsignerNumber, *endorsementrate, logger) case run.FullCommand(): - checkArgs(rate, burst, logger) + checkArgs(rate, burst, signerNumber, logger) err = cmdImpl.Process(*con, *num, *burst, *signerNumber, *rate, logger) default: err = errors.Errorf("invalid command: %s", fullCmd) @@ -56,7 +77,7 @@ func main() { os.Exit(0) } -func checkArgs(rate *float64, burst *int, logger *log.Logger) { +func checkArgs(rate *float64, burst, signerNumber *int, logger *log.Logger) { if *rate < 0 { os.Stderr.WriteString("tape: error: rate must be zero (unlimited) or positive number\n") os.Exit(1) diff --git a/e2e/commitOnly_test.go b/e2e/commitOnly_test.go new file mode 100644 index 00000000..07c3f84a --- /dev/null +++ b/e2e/commitOnly_test.go @@ -0,0 +1,43 @@ +package e2e + +import ( + "io/ioutil" + "os/exec" + + "tape/e2e/mock" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gbytes" + "github.com/onsi/gomega/gexec" +) + +var _ = Describe("Mock test for good path", func() { + + Context("E2E with multi mocked Fabric", func() { + When("envelope only", func() { + It("should work properly", func() { + server, err := mock.NewServer(2, nil) + server.Start() + defer server.Stop() + + config, err := ioutil.TempFile("", "envelop-only-config-*.yaml") + paddrs, oaddr := server.Addresses() + configValue := Values{ + PrivSk: mtlsKeyFile.Name(), + SignCert: mtlsCertFile.Name(), + Mtls: false, + PeersAddrs: paddrs, + OrdererAddr: oaddr, + CommitThreshold: 1, + } + GenerateConfigFile(config.Name(), configValue) + + cmd := exec.Command(tapeBin, "commitOnly", "-c", config.Name(), "-n", "500") + tapeSession, err = gexec.Start(cmd, nil, nil) + Expect(err).NotTo(HaveOccurred()) + Eventually(tapeSession.Out).Should(Say("Time.*Block.*Tx.*")) + }) + }) + }) +}) diff --git a/e2e/endorsementOnly_test.go b/e2e/endorsementOnly_test.go new file mode 100644 index 00000000..a08d5057 --- /dev/null +++ b/e2e/endorsementOnly_test.go @@ -0,0 +1,43 @@ +package e2e + +import ( + "io/ioutil" + "os/exec" + + "tape/e2e/mock" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gbytes" + "github.com/onsi/gomega/gexec" +) + +var _ = Describe("Mock test for good path", func() { + + Context("E2E with multi mocked Fabric", func() { + When("endorsement only", func() { + It("should work properly", func() { + server, err := mock.NewServer(2, nil) + server.Start() + defer server.Stop() + + config, err := ioutil.TempFile("", "endorsement-only-config-*.yaml") + paddrs, oaddr := server.Addresses() + configValue := Values{ + PrivSk: mtlsKeyFile.Name(), + SignCert: mtlsCertFile.Name(), + Mtls: false, + PeersAddrs: paddrs, + OrdererAddr: oaddr, + CommitThreshold: 1, + } + GenerateConfigFile(config.Name(), configValue) + + cmd := exec.Command(tapeBin, "endorsementOnly", "-c", config.Name(), "-n", "500") + tapeSession, err = gexec.Start(cmd, nil, nil) + Expect(err).NotTo(HaveOccurred()) + Eventually(tapeSession.Out).Should(Say("Time.*Tx.*")) + }) + }) + }) +}) diff --git a/e2e/mock/orderer.go b/e2e/mock/orderer.go index 0061c2e7..49243885 100644 --- a/e2e/mock/orderer.go +++ b/e2e/mock/orderer.go @@ -7,6 +7,7 @@ import ( "github.com/hyperledger/fabric-protos-go/common" "github.com/hyperledger/fabric-protos-go/orderer" + "github.com/hyperledger/fabric/protoutil" "google.golang.org/grpc" "google.golang.org/grpc/credentials" ) @@ -18,8 +19,20 @@ type Orderer struct { TxCs []chan struct{} } -func (o *Orderer) Deliver(orderer.AtomicBroadcast_DeliverServer) error { - panic("Not implemented") +func (o *Orderer) Deliver(srv orderer.AtomicBroadcast_DeliverServer) error { + _, err := srv.Recv() + if err != nil { + panic("expect no recv error") + } + for range o.TxCs { + o.cnt++ + if o.cnt%10 == 0 { + srv.Send(&orderer.DeliverResponse{ + Type: &orderer.DeliverResponse_Block{Block: protoutil.NewBlock(10, nil)}, + }) + } + } + return nil } func (o *Orderer) Broadcast(srv orderer.AtomicBroadcast_BroadcastServer) error { diff --git a/go.mod b/go.mod index a763dbe3..99e158b0 100644 --- a/go.mod +++ b/go.mod @@ -3,25 +3,24 @@ module tape go 1.14 require ( + github.com/Shopify/sarama v1.29.1 // indirect github.com/gogo/protobuf v1.2.1 github.com/golang/protobuf v1.4.2 github.com/google/uuid v1.3.0 + github.com/hashicorp/go-version v1.3.0 // indirect + github.com/hyperledger/fabric v2.1.1+incompatible + github.com/hyperledger/fabric-amcl v0.0.0-20210603140002-2670f91851c8 // indirect github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e github.com/hyperledger/fabric-sdk-go v1.0.0-beta1.0.20200317135226-e71412ff3db1 - github.com/kr/pretty v0.2.0 // indirect github.com/onsi/ginkgo v1.13.0 github.com/onsi/gomega v1.10.1 github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.6.0 github.com/spf13/viper v1.4.0 // indirect - github.com/stretchr/testify v1.5.1 // indirect - golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de // indirect - golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect - golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed // indirect + github.com/sykesm/zap-logfmt v0.0.4 // indirect golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 google.golang.org/genproto v0.0.0-20191028173616-919d9bdd9fe6 // indirect google.golang.org/grpc v1.24.0 gopkg.in/alecthomas/kingpin.v2 v2.2.6 - gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/yaml.v2 v2.3.0 ) diff --git a/go.sum b/go.sum index 88980d8b..d38956a7 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Knetic/govaluate v3.0.0+incompatible h1:7o6+MAPhYTCF0+fdvoz1xDedhRb4f6s9Tn1Tt7/WTEg= github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.29.1 h1:wBAacXbYVLmWieEA/0X/JagDdCZ8NVFOfS6l6+2u5S0= +github.com/Shopify/sarama v1.29.1/go.mod h1:mdtqvCSg8JOxk8PmpTNGyo6wzd4BMm4QXSfDnTXmgkE= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -20,11 +25,22 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q= +github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -52,48 +68,80 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93 h1:qdfmdGwtm13OVx+AxguOWUTbgmXGn2TbdUHipo3chMg= github.com/google/certificate-transparency-go v0.0.0-20180222191210-5ab67e519c93/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw= +github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hyperledger/fabric v2.1.1+incompatible h1:cYYRv3vVg4kA6DmrixLxwn1nwBEUuYda8DsMwlaMKbY= +github.com/hyperledger/fabric v2.1.1+incompatible/go.mod h1:tGFAOCT696D3rG0Vofd2dyWYLySHlh0aQjf7Q1HAju0= +github.com/hyperledger/fabric-amcl v0.0.0-20210603140002-2670f91851c8 h1:BCR8ZlOZ+deUbWxyY6fpoY8LbB7PR5wGGwCTvWQOU2g= +github.com/hyperledger/fabric-amcl v0.0.0-20210603140002-2670f91851c8/go.mod h1:X+DIyUsaTmalOpmpQfIvFZjKHQedrURQ5t4YqquX7lE= github.com/hyperledger/fabric-lib-go v1.0.0/go.mod h1:H362nMlunurmHwkYqR5uHL2UDWbQdbfz74n8kbCFsqc= github.com/hyperledger/fabric-protos-go v0.0.0-20191121202242-f5500d5e3e85/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e h1:9PS5iezHk/j7XriSlNuSQILyCOfcZ9wZ3/PiucmSE8E= github.com/hyperledger/fabric-protos-go v0.0.0-20200424173316-dd554ba3746e/go.mod h1:xVYTjK4DtZRBxZ2D9aE4y6AbLaPwue2o/criQyQbVD0= github.com/hyperledger/fabric-sdk-go v1.0.0-beta1.0.20200317135226-e71412ff3db1 h1:b10UG1P9fcuvwof63bfSBqlo1XYSwMlfrXyFiB7ZJOE= github.com/hyperledger/fabric-sdk-go v1.0.0-beta1.0.20200317135226-e71412ff3db1/go.mod h1:/s224b8NLvOJOCIqBvWd9O6u7GE33iuIOT6OfcTE1OE= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8= +github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA= +github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.12.2 h1:2KCfW3I9M7nSc5wOqXAlW2v2U6v+w6cbjvbfp+OykW8= +github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/pkcs11 v0.0.0-20190329070431-55f3fac3af27 h1:XA/VH+SzpYyukhgh7v2mTp8rZoKKITXR/x3FIizVEXs= github.com/miekg/pkcs11 v0.0.0-20190329070431-55f3fac3af27/go.mod h1:WCBAbTOdfhHhz7YXujeZMF7owC4tPb1naKFsgfUISjo= github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= @@ -113,6 +161,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= +github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -131,7 +181,10 @@ github.com/prometheus/procfs v0.0.0-20180705121852-ae68e2d4c00f/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= @@ -154,28 +207,47 @@ github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7Sr github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/sykesm/zap-logfmt v0.0.4 h1:U2WzRvmIWG1wDLCFY3sz8UeEmsdHQjHFNlIdmroVFaI= +github.com/sykesm/zap-logfmt v0.0.4/go.mod h1:AuBd9xQjAe3URrWT1BBDk2v2onAZHkZkWRMiYZXiZWA= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.12.0 h1:dySoUQPFBGj6xwjmBzageVL8jGi8uxc6bEmJQjA06bw= +go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e h1:gsTQYXdTw2Gq7RBsWvlQ91b+aEQ6bXFUngBGuR8sPpI= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -185,9 +257,12 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -207,11 +282,16 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -221,8 +301,14 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -245,8 +331,9 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -257,5 +344,10 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/pkg/infra/basic/client.go b/pkg/infra/basic/client.go index 86ac3be7..34015117 100644 --- a/pkg/infra/basic/client.go +++ b/pkg/infra/basic/client.go @@ -90,3 +90,16 @@ func DailConnection(node Node, logger *log.Logger) (*grpc.ClientConn, error) { } return nil, errors.Wrapf(connError, "error connecting to %s", node.Addr) } + +func CreateDeliverClient(node Node) (orderer.AtomicBroadcast_DeliverClient, error) { + gRPCClient, err := CreateGRPCClient(node) + if err != nil { + return nil, err + } + + conn, err := gRPCClient.NewConnection(node.Addr, func(tlsConfig *tls.Config) { tlsConfig.InsecureSkipVerify = true }) + if err != nil { + return nil, err + } + return orderer.NewAtomicBroadcastClient(conn).Deliver(context.Background()) +} diff --git a/pkg/infra/basic/crypto.go b/pkg/infra/basic/crypto.go index 3203274a..f5d76bf2 100644 --- a/pkg/infra/basic/crypto.go +++ b/pkg/infra/basic/crypto.go @@ -31,8 +31,8 @@ type CryptoImpl struct { SignCert *x509.Certificate } -func (s *CryptoImpl) Sign(message []byte) ([]byte, error) { - ri, si, err := ecdsa.Sign(rand.Reader, s.PrivKey, digest(message)) +func (s *CryptoImpl) Sign(msg []byte) ([]byte, error) { + ri, si, err := ecdsa.Sign(rand.Reader, s.PrivKey, digest(msg)) if err != nil { return nil, err } diff --git a/pkg/infra/cmdImpl/commitOnly.go b/pkg/infra/cmdImpl/commitOnly.go new file mode 100644 index 00000000..5bf4062c --- /dev/null +++ b/pkg/infra/cmdImpl/commitOnly.go @@ -0,0 +1,47 @@ +package cmdImpl + +import ( + "fmt" + "tape/pkg/infra/observer" + "tape/pkg/infra/trafficGenerator" + "time" + + log "github.com/sirupsen/logrus" +) + +func ProcessCommitOnly(configPath string, num int, burst, signerNumber int, rate float64, logger *log.Logger) error { + /*** variables ***/ + cmdConfig, err := CreateCmd(configPath, num, burst, signerNumber, rate) + if err != nil { + return err + } + defer cmdConfig.cancel() + /*** workers ***/ + Observer_workers, Observers, err := observer.CreateObserverWorkers(cmdConfig.Config, cmdConfig.Crypto, cmdConfig.BlockCh, logger, cmdConfig.Ctx, cmdConfig.FinishCh, num, cmdConfig.ErrorCh) + if err != nil { + return err + } + generator_workers, err := trafficGenerator.CreateMockGeneratorWorkers(cmdConfig.Ctx, cmdConfig.Crypto, cmdConfig.Envs, cmdConfig.Config, num, burst, signerNumber, rate, logger, cmdConfig.ErrorCh) + if err != nil { + return err + } + /*** start workers ***/ + for _, worker := range Observer_workers { + go worker.Start() + } + for _, worker := range generator_workers { + go worker.Start() + } + /*** waiting for complete ***/ + for { + select { + case err = <-cmdConfig.ErrorCh: + return err + case <-cmdConfig.FinishCh: + duration := time.Since(Observers.GetTime()) + logger.Infof("Completed processing transactions.") + fmt.Printf("tx: %d, duration: %+v, tps: %f\n", num, duration, float64(num)/duration.Seconds()) + return nil + } + } +} diff --git a/pkg/infra/cmdImpl/endorsementOnly.go b/pkg/infra/cmdImpl/endorsementOnly.go new file mode 100644 index 00000000..b2793cd1 --- /dev/null +++ b/pkg/infra/cmdImpl/endorsementOnly.go @@ -0,0 +1,47 @@ +package cmdImpl + +import ( + "fmt" + "tape/pkg/infra/observer" + "tape/pkg/infra/trafficGenerator" + "time" + + log "github.com/sirupsen/logrus" +) + +func ProcessEndorsementOnly(configPath string, num int, burst, signerNumber int, rate float64, logger *log.Logger) error { + /*** variables ***/ + cmdConfig, err := CreateCmd(configPath, num, burst, signerNumber, rate) + if err != nil { + return err + } + defer cmdConfig.cancel() + /*** workers ***/ + Observer_workers, Observer, err := observer.CreateEndorsementObserverWorkers(cmdConfig.Processed, cmdConfig.Ctx, cmdConfig.FinishCh, num, cmdConfig.ErrorCh, logger) + if err != nil { + return err + } + generator_workers, err := trafficGenerator.CreateGeneratorWorkers(cmdConfig.Ctx, cmdConfig.Crypto, cmdConfig.Raw, cmdConfig.Signed, cmdConfig.Envs, cmdConfig.Processed, cmdConfig.Config, num, burst, signerNumber, rate, logger, cmdConfig.ErrorCh) + if err != nil { + return err + } + /*** start workers ***/ + for _, worker := range Observer_workers { + go worker.Start() + } + for _, worker := range generator_workers { + go worker.Start() + } + /*** waiting for complete ***/ + for { + select { + case err = <-cmdConfig.ErrorCh: + return err + case <-cmdConfig.FinishCh: + duration := time.Since(Observer.GetTime()) + logger.Infof("Completed processing transactions.") + fmt.Printf("tx: %d, duration: %+v, tps: %f\n", num, duration, float64(num)/duration.Seconds()) + return nil + } + } +} diff --git a/pkg/infra/cmdImpl/fullProcess.go b/pkg/infra/cmdImpl/fullProcess.go new file mode 100644 index 00000000..5b6048af --- /dev/null +++ b/pkg/infra/cmdImpl/fullProcess.go @@ -0,0 +1,47 @@ +package cmdImpl + +import ( + "fmt" + "tape/pkg/infra/observer" + "tape/pkg/infra/trafficGenerator" + "time" + + log "github.com/sirupsen/logrus" +) + +func Process(configPath string, num int, burst, signerNumber int, rate float64, logger *log.Logger) error { + /*** variables ***/ + cmdConfig, err := CreateCmd(configPath, num, burst, signerNumber, rate) + if err != nil { + return err + } + defer cmdConfig.cancel() + /*** workers ***/ + Observer_workers, Observers, err := observer.CreateObserverWorkers(cmdConfig.Config, cmdConfig.Crypto, cmdConfig.BlockCh, logger, cmdConfig.Ctx, cmdConfig.FinishCh, num, cmdConfig.ErrorCh) + if err != nil { + return err + } + generator_workers, err := trafficGenerator.CreateGeneratorWorkers(cmdConfig.Ctx, cmdConfig.Crypto, cmdConfig.Raw, cmdConfig.Signed, cmdConfig.Envs, cmdConfig.Processed, cmdConfig.Config, num, burst, signerNumber, rate, logger, cmdConfig.ErrorCh) + if err != nil { + return err + } + /*** start workers ***/ + for _, worker := range Observer_workers { + go worker.Start() + } + for _, worker := range generator_workers { + go worker.Start() + } + /*** waiting for complete ***/ + for { + select { + case err = <-cmdConfig.ErrorCh: + return err + case <-cmdConfig.FinishCh: + duration := time.Since(Observers.GetTime()) + logger.Infof("Completed processing transactions.") + fmt.Printf("tx: %d, duration: %+v, tps: %f\n", num, duration, float64(num)/duration.Seconds()) + return nil + } + } +} diff --git a/pkg/infra/cmdImpl/process.go b/pkg/infra/cmdImpl/process.go deleted file mode 100644 index 08f6f912..00000000 --- a/pkg/infra/cmdImpl/process.go +++ /dev/null @@ -1,68 +0,0 @@ -package cmdImpl - -import ( - "context" - "fmt" - "tape/pkg/infra/basic" - "tape/pkg/infra/observer" - "tape/pkg/infra/trafficGenerator" - "time" - - "github.com/hyperledger/fabric-protos-go/common" - "github.com/hyperledger/fabric-protos-go/peer" - log "github.com/sirupsen/logrus" -) - -func Process(configPath string, num int, burst, signerNumber int, rate float64, logger *log.Logger) error { - /*** variables ***/ - config, err := basic.LoadConfig(configPath) - if err != nil { - return err - } - crypto, err := config.LoadCrypto() - if err != nil { - return err - } - raw := make(chan *peer.Proposal, burst) - signed := make([]chan *basic.Elements, len(config.Endorsers)) - processed := make(chan *basic.Elements, burst) - envs := make(chan *common.Envelope, burst) - - blockCh := make(chan *observer.AddressedBlock) - - finishCh := make(chan struct{}) - errorCh := make(chan error, burst) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - for i := 0; i < len(config.Endorsers); i++ { - signed[i] = make(chan *basic.Elements, burst) - } - /*** workers ***/ - observer_workers, observers, err := observer.CreateObserverWorkers(config, crypto, blockCh, logger, ctx, finishCh, num, errorCh) - if err != nil { - return err - } - generator_workers, err := trafficGenerator.CreateGeneratorWorkers(ctx, crypto, raw, signed, envs, processed, config, num, burst, signerNumber, rate, logger, errorCh) - if err != nil { - return err - } - /*** start workers ***/ - for _, worker := range observer_workers { - go worker.Start() - } - for _, worker := range generator_workers { - go worker.Start() - } - /*** waiting for complete ***/ - for { - select { - case err = <-errorCh: - return err - case <-finishCh: - duration := time.Since(observers.GetTime()) - logger.Infof("Completed processing transactions.") - fmt.Printf("tx: %d, duration: %+v, tps: %f\n", num, duration, float64(num)/duration.Seconds()) - return nil - } - } -} diff --git a/pkg/infra/cmdImpl/processTemplate.go b/pkg/infra/cmdImpl/processTemplate.go new file mode 100644 index 00000000..fef57809 --- /dev/null +++ b/pkg/infra/cmdImpl/processTemplate.go @@ -0,0 +1,64 @@ +package cmdImpl + +import ( + "context" + "tape/pkg/infra" + "tape/pkg/infra/basic" + "tape/pkg/infra/observer" + + "github.com/hyperledger/fabric-protos-go/common" + "github.com/hyperledger/fabric-protos-go/peer" +) + +type CmdConfig struct { + Config basic.Config + Crypto infra.Crypto + Raw chan *peer.Proposal + Signed []chan *basic.Elements + Processed chan *basic.Elements + Envs chan *common.Envelope + BlockCh chan *observer.AddressedBlock + FinishCh chan struct{} + ErrorCh chan error + Ctx context.Context + cancel context.CancelFunc +} + +func CreateCmd(configPath string, num int, burst, signerNumber int, rate float64) (*CmdConfig, error) { + config, err := basic.LoadConfig(configPath) + if err != nil { + return nil, err + } + crypto, err := config.LoadCrypto() + if err != nil { + return nil, err + } + raw := make(chan *peer.Proposal, burst) + signed := make([]chan *basic.Elements, len(config.Endorsers)) + processed := make(chan *basic.Elements, burst) + envs := make(chan *common.Envelope, burst) + + blockCh := make(chan *observer.AddressedBlock) + + finishCh := make(chan struct{}) + errorCh := make(chan error, burst) + ctx, cancel := context.WithCancel(context.Background()) + //defer cancel() + for i := 0; i < len(config.Endorsers); i++ { + signed[i] = make(chan *basic.Elements, burst) + } + cmd := &CmdConfig{ + config, + crypto, + raw, + signed, + processed, + envs, + blockCh, + finishCh, + errorCh, + ctx, + cancel, + } + return cmd, nil +} diff --git a/pkg/infra/interface.go b/pkg/infra/interface.go index 5e3dc79d..1732e7ae 100644 --- a/pkg/infra/interface.go +++ b/pkg/infra/interface.go @@ -1,6 +1,8 @@ package infra import ( + "tape/internal/fabric/protoutil" + "github.com/hyperledger/fabric-protos-go/common" ) @@ -11,9 +13,10 @@ and impl a function for func (c Config) LoadCrypto() (*CryptoImpl, error) { as generator */ type Crypto interface { + protoutil.Signer NewSignatureHeader() (*common.SignatureHeader, error) - Serialize() ([]byte, error) - Sign(message []byte) ([]byte, error) + /*Serialize() ([]byte, error) + Sign(message []byte) ([]byte, error)*/ } /* diff --git a/pkg/infra/observer/commitObserver.go b/pkg/infra/observer/commitObserver.go new file mode 100644 index 00000000..d7f65cbc --- /dev/null +++ b/pkg/infra/observer/commitObserver.go @@ -0,0 +1,69 @@ +package observer + +import ( + "fmt" + "tape/pkg/infra" + "tape/pkg/infra/basic" + "time" + + "github.com/hyperledger/fabric-protos-go/orderer" + log "github.com/sirupsen/logrus" +) + +type CommitObserver struct { + d orderer.AtomicBroadcast_DeliverClient + logger *log.Logger + signal chan error +} + +func CreateCommitObserver(channel string, node basic.Node, crypto *infra.Crypto, logger *log.Logger) *CommitObserver { + if len(node.Addr) == 0 { + return nil + } + deliverer, err := basic.CreateDeliverClient(node) + if err != nil { + panic(err) + } + + /*seek, err := basic.CreateSignedDeliverNewestEnv(channel, crypto) + if err != nil { + panic(err) + } + + if err = deliverer.Send(seek); err != nil { + panic(err) + }*/ + + // drain first response + if _, err = deliverer.Recv(); err != nil { + panic(err) + } + + return &CommitObserver{d: deliverer, signal: make(chan error, 10), logger: logger} +} + +func (o *CommitObserver) Start(N int, now time.Time) { + defer close(o.signal) + o.logger.Debugf("start observer") + n := 0 + for n < N { + r, err := o.d.Recv() + if err != nil { + o.signal <- err + } + if r == nil { + panic("Received nil message, but expect a valid block instead. You could look into your peer logs for more info") + } + tx := len(r.GetBlock().Data.Data) + n += tx + fmt.Printf("Time %8.2fs\tBlock %6d\t Tx %6d\n", time.Since(now).Seconds(), n, tx) + } +} + +func (o *CommitObserver) Wait() { + for err := range o.signal { + if err != nil { + o.logger.Errorf("Observed error: %s\n", err) + } + } +} diff --git a/pkg/infra/observer/endorsementObersver.go b/pkg/infra/observer/endorsementObersver.go new file mode 100644 index 00000000..cd0fe21e --- /dev/null +++ b/pkg/infra/observer/endorsementObersver.go @@ -0,0 +1,40 @@ +package observer + +import ( + "fmt" + "tape/pkg/infra/basic" + "time" + + log "github.com/sirupsen/logrus" +) + +type EndorseObserver struct { + p chan *basic.Elements + n int + logger *log.Logger + Now time.Time + finishCh chan struct{} +} + +func CreateEndorseObserver(processed chan *basic.Elements, N int, finishCh chan struct{}, logger *log.Logger) *EndorseObserver { + return &EndorseObserver{p: processed, n: N, logger: logger, finishCh: finishCh} +} + +func (o *EndorseObserver) Start() { + o.Now = time.Now() + o.logger.Debugf("start observer") + i := 0 + for o.n >= i { + select { + case e := <-o.p: + o.logger.Debugln(e) + fmt.Printf("Time %8.2fs\tTx %6d Processed\n", time.Since(o.Now).Seconds(), i) + i++ + } + } + close(o.finishCh) +} + +func (o *EndorseObserver) GetTime() time.Time { + return o.Now +} diff --git a/pkg/infra/observer/observerFactory.go b/pkg/infra/observer/observerFactory.go index 05673eaa..7d08f4fb 100644 --- a/pkg/infra/observer/observerFactory.go +++ b/pkg/infra/observer/observerFactory.go @@ -23,3 +23,10 @@ func CreateObserverWorkers(config basic.Config, crypto infra.Crypto, blockCh cha observer_workers = append(observer_workers, observers) return observer_workers, observers, nil } + +func CreateEndorsementObserverWorkers(processed chan *basic.Elements, ctx context.Context, finishCh chan struct{}, num int, errorCh chan error, logger *log.Logger) ([]infra.Worker, *EndorseObserver, error) { + observer_workers := make([]infra.Worker, 0) + EndorseObserverWorker := CreateEndorseObserver(processed, num, finishCh, logger) + observer_workers = append(observer_workers, EndorseObserverWorker) + return observer_workers, EndorseObserverWorker, nil +} diff --git a/pkg/infra/trafficGenerator/fackEnvelopGenerator.go b/pkg/infra/trafficGenerator/fackEnvelopGenerator.go new file mode 100644 index 00000000..179859a7 --- /dev/null +++ b/pkg/infra/trafficGenerator/fackEnvelopGenerator.go @@ -0,0 +1,58 @@ +package trafficGenerator + +import ( + "tape/internal/fabric/protoutil" + "tape/pkg/infra" + "tape/pkg/infra/basic" + + "github.com/hyperledger/fabric-protos-go/common" +) + +type fackEnvelopGenerator struct { + Num int + Burst int + R float64 + Config basic.Config + Crypto infra.Crypto + Envs chan *common.Envelope + ErrorCh chan error +} + +func (initiator *fackEnvelopGenerator) Start() { + for i := 0; i < initiator.Num; i++ { + nonce := []byte("nonce-abc-12345") + creator, _ := initiator.Crypto.Serialize() + txid := protoutil.ComputeTxID(nonce, creator) + + txType := common.HeaderType_ENDORSER_TRANSACTION + chdr := &common.ChannelHeader{ + Type: int32(txType), + ChannelId: initiator.Config.Channel, + TxId: txid, + Epoch: uint64(0), + } + + shdr := &common.SignatureHeader{ + Creator: creator, + Nonce: nonce, + } + + payload := &common.Payload{ + Header: &common.Header{ + ChannelHeader: protoutil.MarshalOrPanic(chdr), + SignatureHeader: protoutil.MarshalOrPanic(shdr), + }, + Data: []byte("data"), + } + payloadBytes, _ := protoutil.GetBytesPayload(payload) + + signature, _ := initiator.Crypto.Sign(payloadBytes) + + envelope := &common.Envelope{ + Payload: payloadBytes, + Signature: signature, + } + + initiator.Envs <- envelope + } +} diff --git a/pkg/infra/trafficGenerator/generatorFactory.go b/pkg/infra/trafficGenerator/generatorFactory.go index a2d688cd..bf6117d6 100644 --- a/pkg/infra/trafficGenerator/generatorFactory.go +++ b/pkg/infra/trafficGenerator/generatorFactory.go @@ -35,3 +35,15 @@ func CreateGeneratorWorkers(ctx context.Context, crypto infra.Crypto, raw chan * generator_workers = append(generator_workers, Initiator) return generator_workers, nil } + +func CreateMockGeneratorWorkers(ctx context.Context, crypto infra.Crypto, envs chan *common.Envelope, config basic.Config, num int, burst, signerNumber int, rate float64, logger *log.Logger, errorCh chan error) ([]infra.Worker, error) { + generator_workers := make([]infra.Worker, 0) + fackEnvelopGenerator := &fackEnvelopGenerator{Num: num, Burst: burst, R: rate, Config: config, Crypto: crypto, Envs: envs, ErrorCh: errorCh} + generator_workers = append(generator_workers, fackEnvelopGenerator) + broadcaster, err := CreateBroadcasters(ctx, envs, errorCh, config, logger) + if err != nil { + return generator_workers, err + } + generator_workers = append(generator_workers, broadcaster) + return generator_workers, nil +} diff --git a/test/integration-test.sh b/test/integration-test.sh index c77001c4..3dc3ad8e 100755 --- a/test/integration-test.sh +++ b/test/integration-test.sh @@ -71,15 +71,27 @@ case $1 in echo y | ./network.sh up createChannel cp -r organizations "$DIR" - CONFIG_FILE=/config/test/configlatest.yaml + #CONFIG_FILE=/config/test/configlatest.yaml + #ARGS=(-cci initLedger) - if [ $2 == "ORLogic" ]; then - CONFIG_FILE=/config/test/config20selectendorser.yaml - ARGS=(-ccep "OR('Org1.member','Org2.member')") - else - ARGS=(-cci initLedger) - fi - + case $2 in + ORLogic) + CONFIG_FILE=/config/test/configlatest.yaml + ARGS=(-ccep "OR('Org1.member','Org2.member')") + ;; + ENDORSEMNTONLY) + CONFIG_FILE=/config/test/configlatest.yaml + ARGS=(-ccep "OR('Org1.member','Org2.member')") + ;; + COMMITONLY) + CONFIG_FILE=/config/test/config20selectendorser.yaml + ARGS=(-cci initLedger) + ;; + *) + CONFIG_FILE=/config/test/configlatest.yaml + ARGS=(-cci initLedger) + ;; + esac echo y | ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go/ -ccl go "${ARGS[@]}" ;;