myprogram/
|
|-main.go
|-dir1/
|-data/
|-datafile.json
|-runner.go
|-runner_test.go
In runner.go
, I have a simple function that reads the datafile.json
. Something like
func GetPayload() (string, err) {
dBytes, dErr := ioutil.ReadFile("dir1/data/datafile.json")
if dErr != nil { return nil, dErr}
return dBytes, nil
}
I'm using Go in a Lambda with a structure similar to above. When the Lambda runs in its actual environment, it starts at main.go
, and then invokes GetPayload()
from runner.go
. However, I have a test in a simple worker node machine in runner_test.go
that also hits GetPayload()
.
During "normal" execution (from main.go
) - this works OK. However, when GetPayload()
is invoked from runner_test.go
, it errors, saying
open dir1/data/datafile.json no such file or directory
This makes sense, because during the test, the working directory is the directory that houses runner_test.go
, which is data/
, so there is no dir1
as a child of it. I've been trying to play with using os.Getwd()
and getting the paths from there like:
pwd, _ := os.Getwd()
dBytes, dErr := ioutil.ReadFile(pwd + "dir1/data/datafile.json")
But again, that won't work, because for runner_test.go
pwd is user/myname/myprogram/dir1
, but from main.go
, it turns up as user/myname/myprogram
.
Any idea how I can find and open datafile.json
from within GetPayload()
in any environment? I could pass an optional parameter to GetPayload()
but if possible, it'd be great to avoid that.