parent
fcbcf885e9
commit
89769cff6d
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: compliance
|
||||||
|
trigger:
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
steps:
|
||||||
|
- name: test
|
||||||
|
pull: always
|
||||||
|
image: golang:1.16
|
||||||
|
commands:
|
||||||
|
- make test
|
||||||
|
- name: check
|
||||||
|
pull: always
|
||||||
|
image: golang:1.16
|
||||||
|
commands:
|
||||||
|
- make vet
|
||||||
|
- diff <(gofmt -d .) <(echo -n)
|
|
@ -19,3 +19,8 @@ func (e Epoch) Time() time.Time {
|
||||||
func Now() Epoch {
|
func Now() Epoch {
|
||||||
return Epoch(time.Now().Unix())
|
return Epoch(time.Now().Unix())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Time returns an Epoch based on the given time.Time
|
||||||
|
func Time(t time.Time) Epoch {
|
||||||
|
return Epoch(t.Unix())
|
||||||
|
}
|
||||||
|
|
|
@ -21,4 +21,11 @@ func TestEpochZero(t *testing.T) {
|
||||||
t.Log("epoch did not match zero-time")
|
t.Log("epoch did not match zero-time")
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var z time.Time
|
||||||
|
e := Time(z)
|
||||||
|
if !e.Time().Equal(Zero.Time()) {
|
||||||
|
t.Log("zero-time did not match zero-epoch")
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package file
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Copy copies a file from src to dest
|
||||||
|
func Copy(src, dest string) error {
|
||||||
|
fi, err := os.Lstat(src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
srcFi, err := os.Open(src)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not open src: %w", err)
|
||||||
|
}
|
||||||
|
defer srcFi.Close()
|
||||||
|
|
||||||
|
destFi, err := os.Create(dest)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("could not create dest: %w", err)
|
||||||
|
}
|
||||||
|
defer destFi.Close()
|
||||||
|
|
||||||
|
if err := os.Chmod(dest, fi.Mode()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := io.Copy(destFi, srcFi); err != nil {
|
||||||
|
return fmt.Errorf("could not copy %s to %s: %w", src, dest, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
package file
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCopy(t *testing.T) {
|
||||||
|
contents := "COPY TEST"
|
||||||
|
|
||||||
|
tmpDir, err := os.MkdirTemp(os.TempDir(), "go-common")
|
||||||
|
if err != nil {
|
||||||
|
t.Logf("could not create temp dir: %v", err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
if err := os.RemoveAll(tmpDir); err != nil {
|
||||||
|
t.Logf("could not remove temp dir at %s: %v", tmpDir, err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
tmp1, err := setupCopy(tmpDir, contents)
|
||||||
|
if err != nil {
|
||||||
|
t.Log(err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp2 := filepath.Join(tmpDir, "tmp2")
|
||||||
|
if err := Copy(tmp1, tmp2); err != nil {
|
||||||
|
t.Logf("could not copy file: %v", err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := os.ReadFile(tmp2)
|
||||||
|
if err != nil {
|
||||||
|
t.Logf("could not read tmp2: %v", err)
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(b) != contents {
|
||||||
|
t.Logf("contents did not match")
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupCopy(tmpDir, contents string) (string, error) {
|
||||||
|
tmp, err := os.CreateTemp(tmpDir, "go-common")
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("could not create temp file 1: %v", err)
|
||||||
|
}
|
||||||
|
if _, err := tmp.WriteString(contents); err != nil {
|
||||||
|
return "", fmt.Errorf("could not write to temp file 1: %v", err)
|
||||||
|
}
|
||||||
|
return tmp.Name(), tmp.Close()
|
||||||
|
}
|
2
go.mod
2
go.mod
|
@ -1,3 +1,3 @@
|
||||||
module go.jolheiser.com/go-common
|
module git.jojodev.com/jolheiser/go-common
|
||||||
|
|
||||||
go 1.16
|
go 1.16
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
package random
|
||||||
|
|
||||||
|
import "math/rand"
|
||||||
|
|
||||||
|
// Intn returns a random number between min and max.
|
||||||
|
// It panics if min <= max.
|
||||||
|
// Remember to seed rand first!
|
||||||
|
func Intn(min, max int) int {
|
||||||
|
return RandIntn(nil, min, max)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RandIntn returns a random number between min and max for the given rand.Rand.
|
||||||
|
//
|
||||||
|
// It panics if min <= max.
|
||||||
|
func RandIntn(r *rand.Rand, min, max int) int {
|
||||||
|
if min < max {
|
||||||
|
panic("min cannot be less than or equal to max")
|
||||||
|
}
|
||||||
|
if r == nil {
|
||||||
|
return rand.Intn(max-min) + min
|
||||||
|
}
|
||||||
|
return r.Intn(max-min) + min
|
||||||
|
}
|
Loading…
Reference in New Issue