From 651783eb5917daf95e0aa40f3b22dec96aa2aa24 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Mon, 19 Oct 2020 07:33:20 -0500 Subject: [PATCH] Stub out an `importBundle` file --- README.md | 7 +++++- fixture.pgn => fixtures/fixture.pgn | 0 fixtures/has_blobs/622PVGPG.blb | Bin 0 -> 708 bytes fixtures/has_blobs/FV0FVMRG.blb | Bin 0 -> 2201 bytes fixtures/has_blobs/YPF1PCSG.blb | Bin 0 -> 2322 bytes fixtures/has_blobs/messages.pgn | 29 +++++++++++++++++++++++++ project/cli.go | 18 ++++++++++++++++ project/import_bundle.go | 10 +++++++++ project/import_bundle_test.go | 10 +++++++++ project/parser_test.go | 32 +++++++++++++++++++++++++++- 10 files changed, 104 insertions(+), 2 deletions(-) rename fixture.pgn => fixtures/fixture.pgn (100%) create mode 100644 fixtures/has_blobs/622PVGPG.blb create mode 100644 fixtures/has_blobs/FV0FVMRG.blb create mode 100644 fixtures/has_blobs/YPF1PCSG.blb create mode 100644 fixtures/has_blobs/messages.pgn create mode 100644 project/import_bundle.go create mode 100644 project/import_bundle_test.go diff --git a/README.md b/README.md index 2457df2..85f057d 100644 --- a/README.md +++ b/README.md @@ -33,14 +33,19 @@ Email `contact@vaporsfot.xyz` if you have any questions. - [ ] Switch to [SQLX](https://github.com/jmoiron/sqlx) for extra sanity. - [ ] Write docs for all CLI commands / args AFTER completion. - [ ] Finish all the things below: + +# Protocol Changes? + - [ ] Rename `lipmaa` to `backlink` as Bamboo protocol has done? + - [ ] Don't enforce a structure on how blobs are packed into bundles- the client is forced to determine the SHA checksum regardless. Forced structure just complicates protocol design. + - [ ] Mandate usage of ZIP files so that bundles are always a single file? |Done?|Noun |Verb | Flag / arg 1 | Flag 2 | |-----|------------|-----------|---------------|-----------| | |bundle |ingest | | | - | |blob |remove | mhash | | | |message |show | message mhash | | | |message |find | --all | | + | |blob |remove | mhash | | | |message |find | --last | | | |draft |create | | | | |draft |publish | | | diff --git a/fixture.pgn b/fixtures/fixture.pgn similarity index 100% rename from fixture.pgn rename to fixtures/fixture.pgn diff --git a/fixtures/has_blobs/622PVGPG.blb b/fixtures/has_blobs/622PVGPG.blb new file mode 100644 index 0000000000000000000000000000000000000000..38b1f66bcd737bed41ee45a0f41c11f09f45e2f7 GIT binary patch literal 708 zcmV;#0z3UjNk%w1VORhk0P_F<|NsC0_1DhM&i}@x|M!&tt#ih`d!?LX|CCDqIXV9T zIkf<_a{zMyLP7ul0RMacEC2ui09XJY000F35XecZy*TU5v+H0ej+^rVf~h(}>%MR- z&vb3urgT#4?bnT;aF&wG4>YvVZ_Ug>188 zjW{eWZw2Y_x>ql_^IJt^WM&Ro0y-*KiUR>}E?&0 z)pgt4#(*ad3k(c}w+PQF1=76KKElSYrjqpF63eyc&->5p?)CJt35@qmiiB}y^xay4 z0A0UD&{k=JmCaWxP1s;?BGhop1QY%Z`K8+v3=c71+T@u$welDMa$CxkLxQMb$O0X~ z=$xnV1UW*=XgMH2faV$%HXS6}sZ-tyG2@oOgh`aBQ5^^zBuKE7X%wd}2}u=K?m$(m zZPcjP>Zpc-w=Lev1@i=M&wJxkAar2%>{&Nb+S0HaSAkc;PftXRT8^*Z$3=SynOpd< z;TU3mHa^f7^4~^Ge8|0wc(jYrs4rKRQRKi1&YsWqJ)%qS4ATPaQr>MCF5=v(?*bse z8FuWd2F^MdX~TDK(!q774i20~k>ijLBqxyEK}g#%q)UGx9yN^Li6vmKs@=eL_ediS zhCco@ee>k03tzvTsC)R{c|<4QZL0A`pM9$haUF4x8PM5(280IEfal>>8f6GpS0N53 zyw{m_$e9ISPoa5b;xSvKsN#w&w&>!EFvck3j5O95V*~&p{xec#WOZX@WFR#$B_Kc` qcXxL#a$$3DVr6o2d1z^DY%XJOZ7*kOW_M|NVRB?HXmo9C0027!z)%eU literal 0 HcmV?d00001 diff --git a/fixtures/has_blobs/FV0FVMRG.blb b/fixtures/has_blobs/FV0FVMRG.blb new file mode 100644 index 0000000000000000000000000000000000000000..ed902d41fa66599bb6d46a30da9ecff42ec6aa88 GIT binary patch literal 2201 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 H0kGtME<{UO literal 0 HcmV?d00001 diff --git a/fixtures/has_blobs/messages.pgn b/fixtures/has_blobs/messages.pgn new file mode 100644 index 0000000..fdf1205 --- /dev/null +++ b/fixtures/has_blobs/messages.pgn @@ -0,0 +1,29 @@ +author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG +depth 0 +kind example +lipmaa NONE +prev NONE + +file_name:FILE.FV0FJ0YZADY7C5JTTFYPKDBHTZJ5JVVP5TCKP0605WWXYJG4VMRG + +signature ZYSCKNFP8TW9DME9P9DK4Z4RV09APVEE762HK628K18NMS4DX084XKED71TCRXJNZBWY3TWDYVK1W3K496QF7Y55SCKEWP1D0SP5R30 + +author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG +depth 1 +kind example +lipmaa NONE +prev TEXT.RGKRHC0APNN9FCJTVBN1NR1ZYQ9ZY34PYYASSMJ6016S30ZTWHR0 + +file_name:FILE.YPF11E5N9JFVB6KB1N1WDVVT9DXMCHE0XJWBZHT2CQ29S5SEPCSG + +signature GAZGWG8PWZSP4VSSNYD8J873CQ6KDM93SBMA9VGGC1YW66FER96HEGZQ4CJBH51YN22WMGYADNY2SCWS0JY6YPX4APFDQ60X751JJ1R + +author USER.09XBQDDGZPEKFBFBY67XNR5QA0TRWAKYKYNEDNQTZJV0F1JB0DGG +depth 2 +kind example +lipmaa NONE +prev TEXT.Z3QS1HPX756E22XWKXAXH7NTSTJGY0AHEM9KQNATTC6HHCACZGN0 + +file_name:FILE.622PRNJ7C0S05XR2AHDPKWMG051B1QW5SXMN2RQHF2AND6J8VGPG + +signature W94BVC4ED00Z4TJC0T3BEVC63RJYJC1J4DDS13BJTTGGXK40JSX276B9MV3GPS5JJHZW92YKAZNZ1Q4DCG0K58SCD9ZD0TVZVX7100G diff --git a/project/cli.go b/project/cli.go index 331d21c..a304acc 100644 --- a/project/cli.go +++ b/project/cli.go @@ -145,6 +145,21 @@ var blobFindCommand = &cobra.Command{ }, } +var bundleCommand = &cobra.Command{ + Use: "bundle", + Short: "Operations relating to 'bundles'- a package of information provided by peers", + Run: func(cmd *cobra.Command, args []string) { + }, +} + +var bundleIngestCommand = &cobra.Command{ + Use: "ingest", + Short: "consume a bundle into the local database", + Run: func(cmd *cobra.Command, args []string) { + panic("Work in progress.") + }, +} + // BootstrapCLI wires up all the relevant commands. func BootstrapCLI() { rootCmd.AddCommand(versionCmd) @@ -163,6 +178,9 @@ func BootstrapCLI() { blobRootCmd.AddCommand(blobAddCommand) blobRootCmd.AddCommand(blobFindCommand) + rootCmd.AddCommand(bundleCommand) + bundleCommand.AddCommand(bundleIngestCommand) + if err := rootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) diff --git a/project/import_bundle.go b/project/import_bundle.go new file mode 100644 index 0000000..cbc7d3f --- /dev/null +++ b/project/import_bundle.go @@ -0,0 +1,10 @@ +package main + +import "errors" + +func importBundle(path string) error { + // Get messages.pgn file + // Parse messages + // Map over messages + return errors.New("Not done yet") +} diff --git a/project/import_bundle_test.go b/project/import_bundle_test.go new file mode 100644 index 0000000..e4668ba --- /dev/null +++ b/project/import_bundle_test.go @@ -0,0 +1,10 @@ +package main + +import "testing" + +func TestImportBundle(t *testing.T) { + error := importBundle("../fixtures/has_blobs/messages.pgn") + if error != nil { + t.Fatalf("Error while importing: %s", error) + } +} diff --git a/project/parser_test.go b/project/parser_test.go index afa48f4..bd71ec4 100644 --- a/project/parser_test.go +++ b/project/parser_test.go @@ -7,7 +7,7 @@ import ( ) func TestParser(t *testing.T) { - content, err1 := ioutil.ReadFile("../fixture.pgn") + content, err1 := ioutil.ReadFile("../fixtures/fixture.pgn") if err1 != nil { log.Fatal(err1) } @@ -23,3 +23,33 @@ func TestParser(t *testing.T) { t.Fatalf("Expected %d items, got %d", fixtureSize, length) } } + +func TestParser2(t *testing.T) { + content, err1 := ioutil.ReadFile("../fixtures/has_blobs/messages.pgn") + if err1 != nil { + log.Fatal(err1) + } + output, err2 := parseMessage(string(content)) + + if err2 != nil { + log.Fatal(err2) + } + + fixtureSize := 3 + length := len(output) + if length != fixtureSize { + t.Fatalf("Expected %d items, got %d", fixtureSize, length) + } + sig0 := "ZYSCKNFP8TW9DME9P9DK4Z4RV09APVEE762HK628K18NMS4DX084XKED71TCRXJNZBWY3TWDYVK1W3K496QF7Y55SCKEWP1D0SP5R30" + if output[0].signature != sig0 { + t.Fatal("`sig0` is not correct") + } + sig1 := "GAZGWG8PWZSP4VSSNYD8J873CQ6KDM93SBMA9VGGC1YW66FER96HEGZQ4CJBH51YN22WMGYADNY2SCWS0JY6YPX4APFDQ60X751JJ1R" + if output[1].signature != sig1 { + t.Fatal("`sig1` is not correct") + } + sig2 := "W94BVC4ED00Z4TJC0T3BEVC63RJYJC1J4DDS13BJTTGGXK40JSX276B9MV3GPS5JJHZW92YKAZNZ1Q4DCG0K58SCD9ZD0TVZVX7100G" + if output[2].signature != sig2 { + t.Fatal("`sig2` is not correct") + } +}