Skip to content

Commit

Permalink
Hello world
Browse files Browse the repository at this point in the history
  • Loading branch information
ziflex committed Dec 10, 2021
1 parent dba79f9 commit 483d10c
Show file tree
Hide file tree
Showing 8 changed files with 372 additions and 0 deletions.
36 changes: 36 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: Build

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.x
uses: actions/setup-go@v2
with:
go-version: ^1.17
id: go

- name: Set up linter
run: go get -u github.com/mgechev/revive

- name: Check out code into the Go module directory
uses: actions/checkout@v2

- name: Get dependencies
run: go get -v -t -d ./...

- name: Lint
run: revive -config revive.toml -formatter stylish -exclude ./vendor/... ./...

- name: Vet
run: go vet ./...

- name: Test
run: go test -v ./...
92 changes: 92 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Created by .ignore support plugin (hsz.mobi)
### Windows template
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# IDEA
.idea/

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

### Linux template
*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*

### Go template
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Dependency directories (remove the comment below to include it)
# vendor/

### macOS template
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

bin/
dist/
27 changes: 27 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,29 @@
# waitfor-proc
OS process readiness assertion library

```go
package main

import (
"context"
"fmt"
"github.com/go-waitfor/waitfor"
"github.com/go-waitfor/waitfor-proc"
"os"
)

func main() {
runner := waitfor.New(proc.Use())

err := runner.Test(
context.Background(),
[]string{"proc://node"},
waitfor.WithAttempts(5),
)

if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
```
16 changes: 16 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module github.com/go-waitfor/waitfor-proc

go 1.17

require (
github.com/go-waitfor/waitfor v1.0.0
github.com/mitchellh/go-ps v1.0.0
github.com/stretchr/testify v1.7.0
)

require (
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
github.com/davecgh/go-spew v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect
)
17 changes: 17 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-waitfor/waitfor v1.0.0 h1:KX6SpTtEM2OOwJu5QP6MXvdi0Llq55d8dywSSZD+gSI=
github.com/go-waitfor/waitfor v1.0.0/go.mod h1:a5e6B1hss5InR3moU7xAOP2thPsbjbTArD5+Kud4YaQ=
github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
59 changes: 59 additions & 0 deletions proc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package proc

import (
"context"
"fmt"
"net/url"

"github.com/go-waitfor/waitfor"

"github.com/mitchellh/go-ps"
)

const Scheme = "proc"

type Process struct {
name string
}

func Use() waitfor.ResourceConfig {
return waitfor.ResourceConfig{
Scheme: []string{Scheme},
Factory: New,
}
}

func New(u *url.URL) (waitfor.Resource, error) {
if u == nil {
return nil, fmt.Errorf("%q: %w", "url", waitfor.ErrInvalidArgument)
}

return &Process{name: u.Host}, nil
}

func (p *Process) Test(ctx context.Context) error {
if ctx.Err() != nil {
return ctx.Err()
}

list, err := ps.Processes()

if err != nil {
return err
}

var found bool

for _, proc := range list {
if proc.Executable() == p.name {
found = true
break
}
}

if found {
return nil
}

return fmt.Errorf("process not found: %s", p.name)
}
99 changes: 99 additions & 0 deletions proc_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package proc_test

import (
"context"
"errors"
"net/url"
"os/exec"
"testing"
"time"

"github.com/stretchr/testify/assert"

"github.com/go-waitfor/waitfor"
"github.com/go-waitfor/waitfor-proc"
)

type TestCommand struct {
cmd *exec.Cmd
}

func NewTestCommand() (*TestCommand, error) {
cmd := exec.Command("man", "cat")

if err := cmd.Start(); err != nil {
return nil, err
}

if cmd.Process == nil {
return nil, errors.New("failed to start the test process")
}

return &TestCommand{cmd}, nil
}

func (c *TestCommand) Name() string {
return "man"
}

func (c *TestCommand) Kill() {
_ = c.cmd.Process.Kill()
}

func TestProcess_Use(t *testing.T) {
cmd, err := NewTestCommand()

assert.NoError(t, err)

defer cmd.Kill()

uStr := "proc://" + cmd.Name()
w := waitfor.New(proc.Use())

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

err = w.Test(ctx, []string{uStr})

assert.NoError(t, err)
}

func TestProcess_Test(t *testing.T) {
cmd, err := NewTestCommand()

assert.NoError(t, err)

defer cmd.Kill()

procUrl, err := url.Parse("proc://" + cmd.Name())

assert.NoError(t, err)

r, err := proc.New(procUrl)

assert.NoError(t, err)

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

err = r.Test(ctx)

assert.NoError(t, err)
}

func TestProcess_Test_Fail(t *testing.T) {
procUrl, err := url.Parse("proc://foo")

assert.NoError(t, err)

r, err := proc.New(procUrl)

assert.NoError(t, err)

ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

err = r.Test(ctx)

assert.Error(t, err)
}
26 changes: 26 additions & 0 deletions revive.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
ignoreGeneratedHeader = true
severity = "error"
confidence = 0.8
errorCode = 1
warningCode = 0

[rule.context-as-argument]
[rule.context-keys-type]
[rule.dot-imports]
[rule.error-return]
[rule.error-strings]
[rule.error-naming]
[rule.if-return]
[rule.increment-decrement]
[rule.var-declaration]
[rule.range]
[rule.receiver-naming]
[rule.time-naming]
[rule.unexported-return]
[rule.indent-error-flow]
[rule.errorf]
[rule.empty-block]
[rule.superfluous-else]
[rule.unused-parameter]
[rule.unreachable-code]
[rule.redefines-builtin-id]

0 comments on commit 483d10c

Please sign in to comment.