Skip to content

networkimprov/mnm-hammer

Repository files navigation

mnm is not mail

The mnm project is building a legitimate replacement for email: a client (see below), a server, and a simple protocol between them.

Learn more at mnmnotmail.org.

Download the mnm client app

Status

09 March 2021 - the online demo is released. It has been tested on Chrome & Firefox.

03 January 2021 - v0.9 is released. It fixes a panic and a few flaws, but is otherwise identical to v0.8.

15 November 2020 - v0.8 is released for Windows 7+ & MacOS & Linux. Its UI has been tested on Chrome & Firefox.
New: Markdown reference panel, "Todo" tag on new threads, menu of filled-form tables, and dozens of other enhancements and fixes.

20 April 2020 - v0.7 is released for Windows 7+ & MacOS & Linux. It has been tested with Chrome & Firefox.
New: slide deck layouts, replication to multiple PCs, simplified startup.

20 October 2019 - v0.6 is released for Windows 7+ & MacOS & Linux. It has been tested with Chrome & Firefox.
New: search, message tags, file viewer, UI colors, logo, and more. Fixes many UI flaws.

29 May 2019 - v0.5 is released. It fixes a panic on Windows, but is otherwise identical to v0.4.

25 May 2019 - v0.4 is released. It has been tested on Windows 7 & MacOS & Linux, with Firefox.
New: Windows support. Fixes a crash-recovery failure, and a TMTP handling error.

13 May 2019 - v0.3 is released. It has been tested on Linux & MacOS, with Firefox.
New: tooltips on menu icons. Fixes a panic, and a handful of UI flaws.

07 May 2019 - v0.2 is released. It has been tested on Linux & MacOS, with Firefox.
New: a tour with cartoons covering essential features.

19 April 2019 - v0.1 is released. It has been tested on Linux & MacOS, with Firefox.

Version Numbering

Production releases: 1+ . 0 . 0+

Preview releases: pp . 1+ . pp (first & last from prior production release)

The second number is only used for previews. Most (hopefully all) preview features & changes appear in the following production release.

Build & Package

Requires Go 1.13.3+

a) go get github.com/networkimprov/mnm-hammer
b) cd $GOPATH/src/github.com/networkimprov/mnm-hammer # project directory can be moved out of $GOPATH
c) ./webdeps.sh # download browser modules
d) Edit kVersionDate in main.go
e) ./pkg.sh # make release downloads for all platforms

Building for Windows requires patches to the Go source (which do not affect other programs):
go-winfsd.patch fixes #32088
go-winstat.patch fixes #9611
Apply patches with: cp go*.patch /.../go && (cd /.../go && git apply go*.patch)

Testing

An automated test sequence is defined in test-in.json. It creates accounts Blue and Gold, which then exchange messages. It yields occasional false positives due to loose synchronization between the two accounts. After a test pass completes, the app provides http on port 8123 (unless --http is given):
./mnm-hammer --test server:port # server:port is a TMTP service
To access a previous test pass:
(cd test-run/TPD/ && ../../mnm-hammer --http :8123) # TPD is a directory name

If the TMTP site at server:port is not configured for optional third party authentication, the test sequence will produce an expect/got message from "local1 local" re "cs" (which can be ignored). The test sequence cannot run against a TMTP site that requires third party authentication.

Crash testing
a) ./mnm-hammer --test server:port --crash init # make test directory
b) ./mnm-hammer --test server:port --crash dir:service:order:op[:sender:order] # crash here in test sequence
c) ./mnm-hammer --test server:port --verify dir:service:order:count # recover and verify result

./test-crash.sh server:port [ item_index ] # collection of crash/verify runs in single directory

Code Coverage

a) go test -c -covermode=count -coverpkg ./...
b) go build
c) ./mnm-hammer.test --test localhost:443 -test.coverprofile mnm-hammer.cov
. . . # this test pass directory is TPD below
d) go tool cover -html=test-run/TPD/mnm-hammer.cov -o web/coverage.html
e) (cd test-run/TPD/ && ../../mnm-hammer --http :8123)
f) Open a browser tab, go to localhost:8123/w/coverage.html

Ref: https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests

Demo Files

To generate the demo files:
a) cp web/{gui.vue,service-demo.html}
b) cp web/docs{,-demo}.html
c) git apply web/*demo.patch

To recreate the web/...-demo.patch files after changing the demo files:
a) git diff --no-index web/gui.vue web/service-demo.html > web/service-demo.patch
b) git diff --no-index web/docs.html web/docs-demo.html > web/docs-demo.patch
c) Edit the patches to use a/web/...-demo.html as the origin path.

To create a JSON object for use in web/data-demo.js from an mnm client instance:
a) Edit web/gui.vue to insert <script src="/w/demodata.js"></script> after all other <head> scripts.
b) Quit and restart the app, then Shift-Reload the page at http://localhost:8123.
c) Invoke http://localhost:8123/#demodata and wait while it steps through each account.
d) Open the web console and copy the JSON result.

License

Copyright 2018, 2020 Liam Breck
Published at https://github.com/networkimprov/mnm-hammer

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/