#!/usr/bin/env bats

# This tests pushing and pulling plugins

load helpers

user="testuser"
password="testpassword"
base="hello-world"

#TODO: Create plugin image
function create_plugin() {
	plugindir=$(mktemp -d)

	cat - > $plugindir/config.json <<CONFIGJSON
{
	"manifestVersion": "v0",
	"description": "A test plugin for integration tests",
	"entrypoint": ["/usr/bin/ncat", "-l", "-U", "//run/docker/plugins/plugin.sock"],
	"interface" : {
		"types": ["docker.volumedriver/1.0"],
		"socket": "plugin.sock"
	}
}
CONFIGJSON

	cid=$(docker create dmcgowan/ncat:latest /bin/sh)

	mkdir $plugindir/rootfs

	docker export $cid | tar -x -C $plugindir/rootfs

	docker rm $cid

	daemontmp=$(docker exec dockerdaemon mktemp -d)

	tar -c -C $plugindir . | docker exec -i dockerdaemon tar -x -C $daemontmp

	docker exec dockerdaemon docker plugin create $1 $daemontmp

	docker exec dockerdaemon rm -rf $daemontmp

	rm -rf $plugindir
}

@test "Test plugin push and pull" {
	version_check docker "$GOLEM_DIND_VERSION" "1.13.0-rc3"
	version_check docker "$GOLEM_DISTRIBUTION_VERSION" "2.6.0"

	login_oauth localregistry:5558
	image="localregistry:5558/testuser/plugin1"

	create_plugin $image

	run docker_t plugin push $image
	echo $output
	[ "$status" -eq 0 ]

	docker_t plugin rm $image

	docker_t plugin install --grant-all-permissions $image
}

@test "Test plugin push and failed image pull" {
	version_check docker "$GOLEM_DIND_VERSION" "1.13.0-rc3"
	version_check docker "$GOLEM_DISTRIBUTION_VERSION" "2.6.0"


	login_oauth localregistry:5558
	image="localregistry:5558/testuser/plugin-not-image"

	create_plugin $image

	run docker_t plugin push $image
	echo $output
	[ "$status" -eq 0 ]

	docker_t plugin rm $image

	run docker_t pull $image

	[ "$status" -ne 0 ]
}

@test "Test image push and failed plugin pull" {
	version_check docker "$GOLEM_DIND_VERSION" "1.13.0-rc3"
	version_check docker "$GOLEM_DISTRIBUTION_VERSION" "2.6.0"

	login_oauth localregistry:5558
	image="localregistry:5558/testuser/image-not-plugin"

	build $image "$base:latest"

	run docker_t push $image
	echo $output
	[ "$status" -eq 0 ]

	docker_t rmi $image

	run docker_t plugin install --grant-all-permissions $image

	[ "$status" -ne 0 ]
}