Merge pull request #213 from baude/unitTestsSpec

Test user input to spec
This commit is contained in:
Daniel J Walsh
2018-01-12 10:14:04 -05:00
committed by GitHub
3 changed files with 96 additions and 11 deletions

View File

@ -160,13 +160,18 @@ func createCmd(c *cli.Context) error {
}
}
if len(c.Args()) < 1 {
return errors.Errorf("image name or ID is required")
}
runtime, err := getRuntime(c)
if err != nil {
return errors.Wrapf(err, "error creating libpod runtime")
}
defer runtime.Shutdown(false)
createConfig, err := parseCreateOpts(c, runtime)
imageName, _, data, err := imageData(c, runtime, c.Args()[0])
createConfig, err := parseCreateOpts(c, runtime, imageName, data)
if err != nil {
return err
}
@ -365,15 +370,13 @@ func imageData(c *cli.Context, runtime *libpod.Runtime, image string) (string, s
// Parses CLI options related to container creation into a config which can be
// parsed into an OCI runtime spec
func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime) (*createConfig, error) {
func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime, imageName string, data *libpod.ImageData) (*createConfig, error) {
//imageName, imageID, data, err := imageData(c, runtime, image)
var command []string
var memoryLimit, memoryReservation, memorySwap, memoryKernel int64
var blkioWeight uint16
if len(c.Args()) < 1 {
return nil, errors.Errorf("image name or ID is required")
}
image := c.Args()[0]
imageID := data.ID
if len(c.Args()) > 1 {
command = c.Args()[1:]
@ -460,10 +463,6 @@ func parseCreateOpts(c *cli.Context, runtime *libpod.Runtime) (*createConfig, er
}
shmDir = ctr.ShmDir()
}
imageName, imageID, data, err := imageData(c, runtime, image)
if err != nil {
return nil, err
}
// USER
user := c.String("user")

View File

@ -41,8 +41,12 @@ func runCmd(c *cli.Context) error {
return errors.Wrapf(err, "error creating libpod runtime")
}
defer runtime.Shutdown(false)
if len(c.Args()) < 1 {
return errors.Errorf("image name or ID is required")
}
createConfig, err := parseCreateOpts(c, runtime)
imageName, _, data, err := imageData(c, runtime, c.Args()[0])
createConfig, err := parseCreateOpts(c, runtime, imageName, data)
if err != nil {
return err
}

82
cmd/podman/run_test.go Normal file
View File

@ -0,0 +1,82 @@
package main
import (
"testing"
ociv1 "github.com/opencontainers/image-spec/specs-go/v1"
spec "github.com/opencontainers/runtime-spec/specs-go"
"github.com/projectatomic/libpod/libpod"
"github.com/stretchr/testify/assert"
"github.com/urfave/cli"
)
var (
cmd = []string{"podman", "test", "alpine"}
CLI *cli.Context
testCommand = cli.Command{
Name: "test",
Flags: createFlags,
Action: testCmd,
}
)
// generates a mocked ImageData structure based on alpine
func generateAlpineImageData() *libpod.ImageData {
config := &ociv1.ImageConfig{
User: "",
ExposedPorts: nil,
Env: []string{"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
Entrypoint: []string{},
Cmd: []string{"/bin/sh"},
Volumes: nil,
WorkingDir: "",
Labels: nil,
StopSignal: "",
}
data := &libpod.ImageData{
ID: "e21c333399e0aeedfd70e8827c9fba3f8e9b170ef8a48a29945eb7702bf6aa5f",
RepoTags: []string{"docker.io/library/alpine:latest"},
RepoDigests: []string{"docker.io/library/alpine@sha256:5cb04fce748f576d7b72a37850641de8bd725365519673c643ef2d14819b42c6"},
Comment: "Created:2017-12-01 18:48:48.949613376 +0000",
Author: "",
Architecture: "amd64",
Os: "linux",
Version: "17.06.2-ce",
Config: config,
}
return data
}
// sets a global CLI
func testCmd(c *cli.Context) error {
CLI = c
return nil
}
// creates the mocked cli pointing to our create flags
// global flags like log-level are not implemented
func createCLI() cli.App {
a := cli.App{
Commands: []cli.Command{
testCommand,
},
}
return a
}
func getRuntimeSpec(c *cli.Context) *spec.Spec {
runtime, _ := getRuntime(c)
createConfig, _ := parseCreateOpts(c, runtime, "alpine", generateAlpineImageData())
runtimeSpec, _ := createConfigToOCISpec(createConfig)
return runtimeSpec
}
// TestPIDsLimit verifies the inputed pid-limit is correctly defined in the spec
func TestPIDsLimit(t *testing.T) {
a := createCLI()
args := []string{"--pids-limit", "22"}
a.Run(append(cmd, args...))
runtimeSpec := getRuntimeSpec(CLI)
assert.Equal(t, runtimeSpec.Linux.Resources.Pids.Limit, int64(22))
}