Stub out an `importBundle` file

This commit is contained in:
Netscape Navigator 2020-10-19 07:33:20 -05:00
parent d930e68e53
commit 651783eb59
10 changed files with 104 additions and 2 deletions

View File

@ -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 | | |

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -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

View File

@ -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)

10
project/import_bundle.go Normal file
View File

@ -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")
}

View File

@ -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)
}
}

View File

@ -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")
}
}