text:
rgwadmin: add support for RadosGW Admin Ops API

Following this discussion https://github.com/ceph/go-ceph/discussions/492
This commit introduces a new package "rgwadmin" which helps you interact
with the RadosGW Admin Ops API.
Not all the API capabilities are covered by this commit, but this is a
solid foundation for adding code on top. I'm expecting a few more
iterations to make 100% complete. Also, the RadosGW Admin API is going
to implement new functions soon (like bucket creation). So this library
will live on and keep catching up.
As many unit tests as possible have been added. A new integration test
suite also runs. The "micro-osd.sh" now deploys a RGW and the
integration suite tests on it. Thus the CI should cover it.
Shout out to @QuentinPerez and @IrekFasikhov for their existing
libraries. They were a very good inspiration to get started.
Co-authored-by: Irek Fasikhov malmyzh@gmail.com
Co-authored-by: Quentin Perez qperez42@gmail.com
Signed-off-by: Sébastien Han seb@redhat.com

Checklist

[ ] Added tests for features and functional changes
[ ] Public functions and types are documented
[ ] Standard formatting is applied to Go code

@thotz, is this an API that you could use for your COSI work?

@thotz, is this an API that you could use for your COSI work?

Yes, that's the intention, for both Rook and Ceph-COSI :-)

My local tests are passing:
$ make test-docker

docker build --build-arg CEPH_VERSION=octopus -t go-ceph-ci:octopus -f testing/containers/ceph/Dockerfile .
[+] Building 110.7s (11/11) FINISHED
 => [internal] load build definition from Dockerfile                                                                               0.0s
 => => transferring dockerfile: 37B                                                                                0.0s
 => [internal] load .dockerignore                                                                                0.0s
 => => transferring context: 2B                                                                                0.0s
 => [internal] load metadata for docker.io/ceph/daemon-base:latest-octopus                                                         2.7s
 => [internal] load build context                                                                                0.0s
 => => transferring context: 67B                                                                                0.0s
 => [1/6] FROM docker.io/ceph/daemon-base:latest-octopus@sha256:9d7897f20ea1c68a5e9b3679491c00e268738440d7747206e11a487f3a90110b  43.5s
 => => resolve docker.io/ceph/daemon-base:latest-octopus@sha256:9d7897f20ea1c68a5e9b3679491c00e268738440d7747206e11a487f3a90110b   0.0s
 => => sha256:9d7897f20ea1c68a5e9b3679491c00e268738440d7747206e11a487f3a90110b 743B / 743B                                         0.0s
 => => sha256:87d4014973b60eb51b0d79d76e5af31b79c7614b30a39220d8271763024511ec 22.78kB / 22.78kB                                   0.0s
 => => sha256:e103216eed4d3938ed73b0dd2f3aebaf3b258b17e8756e8fea8364e4be34a89e 293.55MB / 293.55MB                                30.8s
 => => extracting sha256:e103216eed4d3938ed73b0dd2f3aebaf3b258b17e8756e8fea8364e4be34a89e                                         12.1s
 => [2/6] RUN true &&     yum clean all &&     cv="$(rpm -q --queryformat '%{version}-%{release}' ceph-common)" &&     yum insta  49.6s
 => [3/6] RUN true &&     curl -o /tmp/go1.15.10.linux-amd64.tar.gz https://dl.google.com/go/go1.15.10.linux-amd64.tar.gz &&      12.1s
 => [4/6] WORKDIR /go/src/github.com/ceph/go-ceph                                                                                0.1s
 => [5/6] COPY micro-osd.sh /                                                                                0.0s
 => [6/6] COPY entrypoint.sh /                                                                                0.0s
 => exporting to image                                                                                2.4s
 => => exporting layers                                                                                2.4s
 => => writing image sha256:26ecff9b28e8e43e4adbbe498bbe12ea479a04b76929fced477329e63d4a4db0                                       0.0s
 => => naming to docker.io/library/go-ceph-ci:octopus                                                                              0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
echo octopus >> .build.octopus
docker run --security-opt apparmor:unconfined --rm -v /Users/leseb/go/src/github.com/ceph/go-ceph:/go/src/github.com/ceph/go-ceph  go-ceph-ci:octopus
*** running: /micro-osd.sh /tmp/ceph
++ set -u
++ DIR=/tmp/ceph
++ pkill ceph
++ true
++ rm -rf '/tmp/ceph/*'
++ LOG_DIR=/tmp/ceph/log
++ MON_DATA=/tmp/ceph/mon
++ MDS_DATA=/tmp/ceph/mds
++ MOUNTPT=/tmp/ceph/mds/mnt
++ OSD_DATA=/tmp/ceph/osd
++ RGW_DATA=/tmp/ceph/radosgw
++ mkdir /tmp/ceph/log /tmp/ceph/mon /tmp/ceph/osd /tmp/ceph/mds /tmp/ceph/mds/mnt /tmp/ceph/radosgw
++ MDS_NAME=Z
++ MON_NAME=a
++ MGR_NAME=x
++ MIRROR_ID=m
++ RGW_ID=r
++ cat
+++ uuidgen
++ export CEPH_CONF=/tmp/ceph/ceph.conf
++ CEPH_CONF=/tmp/ceph/ceph.conf
++ ceph-mon --id a --mkfs --keyring /dev/null
++ touch /tmp/ceph/mon/keyring
++ ceph-mon --id a
2021-05-05T15:05:32.150+0000 7fc58a786700 -1 WARNING: invalid 'mon addr' config option
         continuing with monmap configuration
+++ ceph osd create
++ OSD_ID=0
++ ceph osd crush add osd.0 1 root=default
add item id 0 name 'osd.0' weight 1 at location {root=default} to crush map
++ ceph-osd --id 0 --mkjournal --mkfs
2021-05-05T15:05:33.852+0000 7f2775b64f40 -1 memstore(/tmp/ceph/osd) /tmp/ceph/osd
++ ceph-osd --id 0
2021-05-05T15:05:33.908+0000 7f7d8a341f40 -1 Falling back to public interface
2021-05-05T15:05:33.969+0000 7f7d8a341f40 -1 osd.0 0 log_to_monitors {default=true}
++ ceph auth get-or-create mds.Z mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *'
++ ceph osd pool create cephfs_data 8
pool 'cephfs_data' created
++ ceph osd pool create cephfs_metadata 8
pool 'cephfs_metadata' created
++ ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1
++ ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
++ ceph-mds -i Z
starting mds.Z at
++ ceph status
  cluster:
    id:     2a55caaa-e40e-4d37-a723-89635dd27612
    health: HEALTH_ERR
            mon is allowing insecure global_id reclaim
            1 filesystem is offline
            1 filesystem is online with fewer MDS than max_mds
            2 pool(s) have no replicas configured

  services:
    mon: 1 daemons, quorum a (age 6s)
    mgr: no daemons active
    mds: cephfs:0
    osd: 1 osds: 1 up (since 1.78656s), 1 in (since 1.78656s)

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

+++ ceph mds stat
+++ grep up:active
++ [[ ! -n '' ]]
++ sleep 1
+++ ceph mds stat
+++ grep up:active
++ [[ ! -n cephfs:1 {0=Z=up:active} ]]
++ ceph-mgr --id x
++ ceph auth get-or-create client.rbd-mirror.m mon 'profile rbd-mirror' osd 'profile rbd'
[client.rbd-mirror.m]
        key = AQBEtJJgaD3zGxAANrO+j6Q+soMACCvTivoP1w==
++ rbd-mirror --id m --log-file /tmp/ceph/log/rbd-mirror.log
++ ceph auth get-or-create client.rgw.r osd 'allow rwx' mon 'allow rw' -o /tmp/ceph/radosgw/keyring
++ radosgw -n client.rgw.r -k /tmp/ceph/radosgw/keyring
++ timeout 60 sh -c 'until [ $(ceph -s | grep -c "rgw:") -eq 1 ]; do echo "waiting for rgw to show up" && sleep 1; done'
waiting for rgw to show up
waiting for rgw to show up
waiting for rgw to show up
waiting for rgw to show up
waiting for rgw to show up
waiting for rgw to show up
waiting for rgw to show up
waiting for rgw to show up
++ radosgw-admin user create --uid admin --display-name 'Admin User' --caps 'buckets=*;users=*;usage=read;metadata=read;zone=read' --access-key=2262XNX11FZRR44XWIRD --secret-key=rmtuS1Uj1bIC08QFYGW18GfSHAbkPqdsuYynNudw
{
    "user_id": "admin",
    "display_name": "Admin User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "admin",
            "access_key": "2262XNX11FZRR44XWIRD",
            "secret_key": "rmtuS1Uj1bIC08QFYGW18GfSHAbkPqdsuYynNudw"
        }
    ],
    "swift_keys": [],
    "caps": [
        {
            "type": "buckets",
            "perm": "*"
        },
        {
            "type": "metadata",
            "perm": "read"
        },
        {
            "type": "usage",
            "perm": "read"
        },
        {
            "type": "users",
            "perm": "*"
        },
        {
            "type": "zone",
            "perm": "read"
        }
    ],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "check_on_raw": false,
        "max_size": -1,
        "max_size_kb": 0,
        "max_objects": -1
    },
    "temp_url_keys": [],
    "type": "rgw",
    "mfa_ids": []
}

++ ceph --version
ceph version 15.2.11 (e3523634d9c2227df9af89a4eac33d16738c49cb) octopus (stable)
++ ceph status
  cluster:
    id:     2a55caaa-e40e-4d37-a723-89635dd27612
    health: HEALTH_WARN
            mon is allowing insecure global_id reclaim
            7 pool(s) have no replicas configured

  services:
    mon:        1 daemons, quorum a (age 20s)
    mgr:        x(active, since 7s)
    mds:        cephfs:1 {0=Z=up:active}
    osd:        1 osds: 1 up (since 15s), 1 in (since 15s)
    rbd-mirror: 1 daemon active (4135)
    rgw:        1 daemon active (r)

  task status:

  data:
    pools:   7 pools, 145 pgs
    objects: 26 objects, 3.9 KiB
    usage:   40 KiB used, 1024 MiB / 1 GiB avail
    pgs:     22.069% pgs unknown
             22.759% pgs not active
             80 active+clean
             33 creating+peering
             32 unknown

+++ uuidgen
++ test_pool=243136ce-1e7e-4310-ac7a-e67773a2991c
+++ mktemp
++ temp_file=/tmp/tmp.Nj6roZYaw2
++ ceph osd pool create 243136ce-1e7e-4310-ac7a-e67773a2991c 0
pool '243136ce-1e7e-4310-ac7a-e67773a2991c' created
++ rados --pool 243136ce-1e7e-4310-ac7a-e67773a2991c put group /etc/group
++ rados --pool 243136ce-1e7e-4310-ac7a-e67773a2991c get group /tmp/tmp.Nj6roZYaw2
++ diff /etc/group /tmp/tmp.Nj6roZYaw2
++ ceph osd pool delete 243136ce-1e7e-4310-ac7a-e67773a2991c 243136ce-1e7e-4310-ac7a-e67773a2991c --yes-i-really-really-mean-it
pool '243136ce-1e7e-4310-ac7a-e67773a2991c' removed
++ rm /tmp/tmp.Nj6roZYaw2
++ touch /tmp/ceph/.ready
go: downloading golang.org/x/sys v0.0.0-20200501145240-bc7a7d42d5c3
go: downloading github.com/pkg/errors v0.9.1
go: downloading github.com/aws/aws-sdk-go v1.35.24
go: downloading github.com/jmespath/go-jmespath v0.4.0
go: downloading github.com/stretchr/testify v1.4.0
go: downloading github.com/gofrs/uuid v3.2.0+incompatible
go: downloading gopkg.in/yaml.v2 v2.2.8
go: downloading github.com/pmezard/go-difflib v1.0.0
go: downloading github.com/davecgh/go-spew v1.1.0
github.com/ceph/go-ceph
github.com/ceph/go-ceph/internal/retry
golang.org/x/sys/internal/unsafeheader
github.com/aws/aws-sdk-go/aws/client/metadata
github.com/aws/aws-sdk-go/internal/sdkmath
github.com/ceph/go-ceph/internal/cutil
github.com/ceph/go-ceph/internal/errutil
golang.org/x/sys/unix
github.com/aws/aws-sdk-go/aws/awserr
github.com/ceph/go-ceph/internal/callbacks
github.com/ceph/go-ceph/contrib/implements/internal/implements
github.com/aws/aws-sdk-go/internal/shareddefaults
github.com/aws/aws-sdk-go/internal/sync/singleflight
github.com/aws/aws-sdk-go/internal/sdkio
github.com/aws/aws-sdk-go/internal/ini
github.com/aws/aws-sdk-go/aws/endpoints
github.com/ceph/go-ceph/contrib/implements
github.com/aws/aws-sdk-go/aws/credentials
github.com/jmespath/go-jmespath
github.com/aws/aws-sdk-go/internal/strings
github.com/pkg/errors
github.com/ceph/go-ceph/internal/timespec
github.com/aws/aws-sdk-go/aws/awsutil
github.com/ceph/go-ceph/rados
github.com/aws/aws-sdk-go/aws
github.com/aws/aws-sdk-go/aws/request
github.com/aws/aws-sdk-go/private/protocol
github.com/aws/aws-sdk-go/private/protocol/rest
github.com/aws/aws-sdk-go/aws/signer/v4
github.com/ceph/go-ceph/rgwadmin
github.com/ceph/go-ceph/contrib
github.com/ceph/go-ceph/internal/commands
github.com/ceph/go-ceph/cephfs
github.com/ceph/go-ceph/rbd
github.com/ceph/go-ceph/cephfs/admin
make: 'implements' is up to date.
*** running: go vet -tags octopus ./cephfs
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=cephfs.cover.out -coverpkg=github.com/ceph/go-ceph/cephfs ./cephfs
=== RUN   TestCreateMount
--- PASS: TestCreateMount (0.00s)
=== RUN   TestMountRoot
--- PASS: TestMountRoot (0.03s)
=== RUN   TestSyncFs
--- PASS: TestSyncFs (0.03s)
=== RUN   TestUnmountMount
=== RUN   TestUnmountMount/neverMounted
=== RUN   TestUnmountMount/mountUnmount
--- PASS: TestUnmountMount (0.03s)
    --- PASS: TestUnmountMount/neverMounted (0.00s)
    --- PASS: TestUnmountMount/mountUnmount (0.03s)
=== RUN   TestReleaseMount
--- PASS: TestReleaseMount (0.00s)
=== RUN   TestCreateFromRados
--- PASS: TestCreateFromRados (0.01s)
=== RUN   TestCreateMountWithId
--- PASS: TestCreateMountWithId (0.03s)
=== RUN   TestMountWithRoot
=== RUN   TestMountWithRoot/withRoot
=== RUN   TestMountWithRoot/badRoot
--- PASS: TestMountWithRoot (0.10s)
    --- PASS: TestMountWithRoot/withRoot (0.03s)
    --- PASS: TestMountWithRoot/badRoot (0.03s)
=== RUN   TestGetSetConfigOption
--- PASS: TestGetSetConfigOption (0.00s)
=== RUN   TestParseConfigArgv
--- PASS: TestParseConfigArgv (0.00s)
=== RUN   TestParseDefaultConfigEnv
--- PASS: TestParseDefaultConfigEnv (0.00s)
=== RUN   TestValidate
=== RUN   TestValidate/mountCurrentDir
=== RUN   TestValidate/mountChangeDir
=== RUN   TestValidate/mountMakeDir
=== RUN   TestValidate/mountRemoveDir
=== RUN   TestValidate/mountLink
=== RUN   TestValidate/mountUnlink
=== RUN   TestValidate/mountSymlink
=== RUN   TestValidate/mountReadlink
--- PASS: TestValidate (0.01s)
    --- PASS: TestValidate/mountCurrentDir (0.00s)
    --- PASS: TestValidate/mountChangeDir (0.00s)
    --- PASS: TestValidate/mountMakeDir (0.00s)
    --- PASS: TestValidate/mountRemoveDir (0.00s)
    --- PASS: TestValidate/mountLink (0.00s)
    --- PASS: TestValidate/mountUnlink (0.00s)
    --- PASS: TestValidate/mountSymlink (0.00s)
    --- PASS: TestValidate/mountReadlink (0.00s)
=== RUN   TestMdsCommand
--- PASS: TestMdsCommand (0.03s)
=== RUN   TestMdsCommandError
--- PASS: TestMdsCommandError (0.03s)
=== RUN   TestGetFsCid
=== RUN   TestGetFsCid/unmounted
=== RUN   TestGetFsCid/mounted
--- PASS: TestGetFsCid (0.03s)
    --- PASS: TestGetFsCid/unmounted (0.01s)
    --- PASS: TestGetFsCid/mounted (0.03s)
=== RUN   TestOpenCloseDir
--- PASS: TestOpenCloseDir (0.04s)
=== RUN   TestReadDir
=== RUN   TestReadDir/root
=== RUN   TestReadDir/dir1
--- PASS: TestReadDir (0.06s)
    --- PASS: TestReadDir/root (0.00s)
    --- PASS: TestReadDir/dir1 (0.01s)
=== RUN   TestDirectoryList
=== RUN   TestDirectoryList/root
=== RUN   TestDirectoryList/dir1
=== RUN   TestDirectoryList/dir1Twice
--- PASS: TestDirectoryList (0.08s)
    --- PASS: TestDirectoryList/root (0.00s)
    --- PASS: TestDirectoryList/dir1 (0.01s)
    --- PASS: TestDirectoryList/dir1Twice (0.01s)
=== RUN   TestReadDirPlus
=== RUN   TestReadDirPlus/root
=== RUN   TestReadDirPlus/dir1
--- PASS: TestReadDirPlus (0.06s)
    --- PASS: TestReadDirPlus/root (0.00s)
    --- PASS: TestReadDirPlus/dir1 (0.01s)
=== RUN   TestReadDirPlusInvalid
--- PASS: TestReadDirPlusInvalid (0.03s)
=== RUN   TestCephFSError
--- PASS: TestCephFSError (0.00s)
=== RUN   TestFileOpen
=== RUN   TestFileOpen/create
=== RUN   TestFileOpen/errorMissing
=== RUN   TestFileOpen/existsInMount
=== RUN   TestFileOpen/idempotentClose
=== RUN   TestFileOpen/uninitializedFileClose
=== RUN   TestFileOpen/invalidFdClose
=== RUN   TestFileOpen/openInvalidMount
--- PASS: TestFileOpen (0.04s)
    --- PASS: TestFileOpen/create (0.01s)
    --- PASS: TestFileOpen/errorMissing (0.00s)
    --- PASS: TestFileOpen/existsInMount (0.00s)
    --- PASS: TestFileOpen/idempotentClose (0.00s)
    --- PASS: TestFileOpen/uninitializedFileClose (0.00s)
    --- PASS: TestFileOpen/invalidFdClose (0.00s)
    --- PASS: TestFileOpen/openInvalidMount (0.00s)
=== RUN   TestFileReadWrite
=== RUN   TestFileReadWrite/writeAndRead
=== RUN   TestFileReadWrite/openForWriteOnly
=== RUN   TestFileReadWrite/openForReadOnly
=== RUN   TestFileReadWrite/uninitializedFile
--- PASS: TestFileReadWrite (0.04s)
    --- PASS: TestFileReadWrite/writeAndRead (0.01s)
    --- PASS: TestFileReadWrite/openForWriteOnly (0.00s)
    --- PASS: TestFileReadWrite/openForReadOnly (0.01s)
    --- PASS: TestFileReadWrite/uninitializedFile (0.00s)
=== RUN   TestFileReadWriteAt
=== RUN   TestFileReadWriteAt/writeAtAndReadAt
=== RUN   TestFileReadWriteAt/openForWriteOnly
=== RUN   TestFileReadWriteAt/openForReadOnly
=== RUN   TestFileReadWriteAt/uninitializedFile
--- PASS: TestFileReadWriteAt (0.05s)
    --- PASS: TestFileReadWriteAt/writeAtAndReadAt (0.01s)
    --- PASS: TestFileReadWriteAt/openForWriteOnly (0.00s)
    --- PASS: TestFileReadWriteAt/openForReadOnly (0.01s)
    --- PASS: TestFileReadWriteAt/uninitializedFile (0.00s)
=== RUN   TestFileInterfaces
=== RUN   TestFileInterfaces/ioWriter
=== RUN   TestFileInterfaces/ioReader
--- PASS: TestFileInterfaces (4.69s)
    --- PASS: TestFileInterfaces/ioWriter (0.01s)
    --- PASS: TestFileInterfaces/ioReader (0.00s)
=== RUN   TestFileSeek
=== RUN   TestFileSeek/validSeek
=== RUN   TestFileSeek/invalidWhence
=== RUN   TestFileSeek/invalidSeek
=== RUN   TestFileSeek/uninitializedFile
--- PASS: TestFileSeek (5.00s)
    --- PASS: TestFileSeek/validSeek (0.01s)
    --- PASS: TestFileSeek/invalidWhence (0.00s)
    --- PASS: TestFileSeek/invalidSeek (0.00s)
    --- PASS: TestFileSeek/uninitializedFile (0.00s)
=== RUN   TestMixedReadReadAt
--- PASS: TestMixedReadReadAt (0.04s)
=== RUN   TestFchmod
--- PASS: TestFchmod (0.04s)
=== RUN   TestFchown
--- PASS: TestFchown (0.03s)
=== RUN   TestFstatx
=== RUN   TestFstatx/emptyFile
=== RUN   TestFstatx/populateFile
=== RUN   TestFstatx/closedFile
=== RUN   TestFstatx/invalidFile
--- PASS: TestFstatx (5.04s)
    --- PASS: TestFstatx/emptyFile (0.00s)
    --- PASS: TestFstatx/populateFile (0.00s)
    --- PASS: TestFstatx/closedFile (0.00s)
    --- PASS: TestFstatx/invalidFile (0.00s)
=== RUN   TestFallocate
=== RUN   TestFallocate/NegativeOffsetLength
=== RUN   TestFallocate/modeIsZero
=== RUN   TestFallocate/increaseSize
=== RUN   TestFallocate/allocateSpaceWithFlag
=== RUN   TestFallocate/punchHoleFlagAlone
=== RUN   TestFallocate/punchActualHoles
=== RUN   TestFallocate/checkValidate
--- PASS: TestFallocate (0.06s)
    --- PASS: TestFallocate/NegativeOffsetLength (0.00s)
    --- PASS: TestFallocate/modeIsZero (0.00s)
    --- PASS: TestFallocate/increaseSize (0.01s)
    --- PASS: TestFallocate/allocateSpaceWithFlag (0.01s)
    --- PASS: TestFallocate/punchHoleFlagAlone (0.00s)
    --- PASS: TestFallocate/punchActualHoles (0.01s)
    --- PASS: TestFallocate/checkValidate (0.00s)
=== RUN   TestFlock
=== RUN   TestFlock/validate
=== RUN   TestFlock/validateOperation
=== RUN   TestFlock/basicLocking
=== RUN   TestFlock/basicLocking/exclusiveTwiceBlock
=== RUN   TestFlock/basicLocking/exclusiveTwiceNonBlock
=== RUN   TestFlock/basicLocking/sharedLock
=== RUN   TestFlock/basicLocking/sharedLockUpExclusive
=== RUN   TestFlock/basicLocking/exclusiveLockDownShared
--- PASS: TestFlock (0.07s)
    --- PASS: TestFlock/validate (0.00s)
    --- PASS: TestFlock/validateOperation (0.01s)
    --- PASS: TestFlock/basicLocking (0.03s)
        --- PASS: TestFlock/basicLocking/exclusiveTwiceBlock (0.01s)
        --- PASS: TestFlock/basicLocking/exclusiveTwiceNonBlock (0.00s)
        --- PASS: TestFlock/basicLocking/sharedLock (0.01s)
        --- PASS: TestFlock/basicLocking/sharedLockUpExclusive (0.00s)
        --- PASS: TestFlock/basicLocking/exclusiveLockDownShared (0.00s)
=== RUN   TestFsync
=== RUN   TestFsync/simpleFsync
=== RUN   TestFsync/DataOnly
=== RUN   TestFsync/invalid
--- PASS: TestFsync (0.05s)
    --- PASS: TestFsync/simpleFsync (0.01s)
    --- PASS: TestFsync/DataOnly (0.00s)
    --- PASS: TestFsync/invalid (0.00s)
=== RUN   TestSync
=== RUN   TestSync/simple
=== RUN   TestSync/invalid
--- PASS: TestSync (0.04s)
    --- PASS: TestSync/simple (0.01s)
    --- PASS: TestSync/invalid (0.00s)
=== RUN   TestFilePreadvPwritev
=== RUN   TestFilePreadvPwritev/simple
=== RUN   TestFilePreadvPwritev/silly
=== RUN   TestFilePreadvPwritev/readEOF
=== RUN   TestFilePreadvPwritev/shortRead
=== RUN   TestFilePreadvPwritev/openForWriteOnly
=== RUN   TestFilePreadvPwritev/openForReadOnly
=== RUN   TestFilePreadvPwritev/writeInvalidFile
=== RUN   TestFilePreadvPwritev/readInvalidFile
--- PASS: TestFilePreadvPwritev (0.07s)
    --- PASS: TestFilePreadvPwritev/simple (0.01s)
    --- PASS: TestFilePreadvPwritev/silly (0.01s)
    --- PASS: TestFilePreadvPwritev/readEOF (0.01s)
    --- PASS: TestFilePreadvPwritev/shortRead (0.01s)
    --- PASS: TestFilePreadvPwritev/openForWriteOnly (0.01s)
    --- PASS: TestFilePreadvPwritev/openForReadOnly (0.01s)
    --- PASS: TestFilePreadvPwritev/writeInvalidFile (0.00s)
    --- PASS: TestFilePreadvPwritev/readInvalidFile (0.00s)
=== RUN   TestFileTruncate
=== RUN   TestFileTruncate/invalidSize
=== RUN   TestFileTruncate/closedFile
    file_test.go:937: test fails because of a bug(?) in ceph
=== RUN   TestFileTruncate/invalidFile
--- PASS: TestFileTruncate (0.04s)
    --- PASS: TestFileTruncate/invalidSize (0.00s)
    --- SKIP: TestFileTruncate/closedFile (0.00s)
    --- PASS: TestFileTruncate/invalidFile (0.00s)
=== RUN   TestGetSetXattr
=== RUN   TestGetSetXattr/roundTrip-user.xPhrase
=== RUN   TestGetSetXattr/roundTrip-user.xHasNulls
=== RUN   TestGetSetXattr/roundTrip-user.x2kZeros
=== RUN   TestGetSetXattr/roundTrip-user.xEmpty
=== RUN   TestGetSetXattr/missingXattrOnGet
=== RUN   TestGetSetXattr/emptyNameGet
=== RUN   TestGetSetXattr/emptyNameSet
=== RUN   TestGetSetXattr/invalidFile
--- PASS: TestGetSetXattr (0.05s)
    --- PASS: TestGetSetXattr/roundTrip-user.xPhrase (0.00s)
    --- PASS: TestGetSetXattr/roundTrip-user.xHasNulls (0.00s)
    --- PASS: TestGetSetXattr/roundTrip-user.x2kZeros (0.00s)
    --- PASS: TestGetSetXattr/roundTrip-user.xEmpty (0.00s)
    --- PASS: TestGetSetXattr/missingXattrOnGet (0.00s)
    --- PASS: TestGetSetXattr/emptyNameGet (0.00s)
    --- PASS: TestGetSetXattr/emptyNameSet (0.00s)
    --- PASS: TestGetSetXattr/invalidFile (0.00s)
=== RUN   TestListXattr
=== RUN   TestListXattr/listXattrs1
=== RUN   TestListXattr/listXattrs2
=== RUN   TestListXattr/invalidFile
--- PASS: TestListXattr (0.05s)
    --- PASS: TestListXattr/listXattrs1 (0.00s)
    --- PASS: TestListXattr/listXattrs2 (0.01s)
    --- PASS: TestListXattr/invalidFile (0.00s)
=== RUN   TestRemoveXattr
=== RUN   TestRemoveXattr/removeXattr
=== RUN   TestRemoveXattr/removeMissingXattr
=== RUN   TestRemoveXattr/emptyName
=== RUN   TestRemoveXattr/invalidFile
--- PASS: TestRemoveXattr (0.05s)
    --- PASS: TestRemoveXattr/removeXattr (0.01s)
    --- PASS: TestRemoveXattr/removeMissingXattr (0.00s)
    --- PASS: TestRemoveXattr/emptyName (0.00s)
    --- PASS: TestRemoveXattr/invalidFile (0.00s)
=== RUN   TestSetMountPerms
=== RUN   TestSetMountPerms/checkStat
--- PASS: TestSetMountPerms (0.04s)
    --- PASS: TestSetMountPerms/checkStat (0.01s)
=== RUN   TestChangeDir
--- PASS: TestChangeDir (0.04s)
=== RUN   TestRemoveDir
--- PASS: TestRemoveDir (0.04s)
=== RUN   TestLink
=== RUN   TestLink/rootDirOperations
=== RUN   TestLink/dirAsSource
=== RUN   TestLink/dirAsDestination
=== RUN   TestLink/sourceDoesNotExist
=== RUN   TestLink/sourceExistsSuccess
=== RUN   TestLink/destExistsError
--- PASS: TestLink (0.07s)
    --- PASS: TestLink/rootDirOperations (0.01s)
    --- PASS: TestLink/dirAsSource (0.00s)
    --- PASS: TestLink/dirAsDestination (0.01s)
    --- PASS: TestLink/sourceDoesNotExist (0.00s)
    --- PASS: TestLink/sourceExistsSuccess (0.01s)
    --- PASS: TestLink/destExistsError (0.01s)
=== RUN   TestUnlink
=== RUN   TestUnlink/fileUnlink
=== RUN   TestUnlink/dirUnlink
--- PASS: TestUnlink (0.06s)
    --- PASS: TestUnlink/fileUnlink (0.01s)
    --- PASS: TestUnlink/dirUnlink (0.01s)
=== RUN   TestSymlink
=== RUN   TestSymlink/sourceDoesNotExistSuccess
=== RUN   TestSymlink/symlinkExistsError
=== RUN   TestSymlink/sourceExistsSuccess
=== RUN   TestSymlink/rootDirOps
=== RUN   TestSymlink/nonRootDir
--- PASS: TestSymlink (0.07s)
    --- PASS: TestSymlink/sourceDoesNotExistSuccess (0.01s)
    --- PASS: TestSymlink/symlinkExistsError (0.01s)
    --- PASS: TestSymlink/sourceExistsSuccess (0.01s)
    --- PASS: TestSymlink/rootDirOps (0.00s)
    --- PASS: TestSymlink/nonRootDir (0.02s)
=== RUN   TestReadlink
=== RUN   TestReadlink/regularFile
=== RUN   TestReadlink/symLink
=== RUN   TestReadlink/hardLink
--- PASS: TestReadlink (0.05s)
    --- PASS: TestReadlink/regularFile (0.01s)
    --- PASS: TestReadlink/symLink (0.00s)
    --- PASS: TestReadlink/hardLink (0.01s)
=== RUN   TestStatx
=== RUN   TestStatx/statPath
=== RUN   TestStatx/invalidMount
--- PASS: TestStatx (0.04s)
    --- PASS: TestStatx/statPath (0.04s)
    --- PASS: TestStatx/invalidMount (0.00s)
=== RUN   TestRename
=== RUN   TestRename/invalidMount
=== RUN   TestRename/renameDir
--- PASS: TestRename (0.04s)
    --- PASS: TestRename/invalidMount (0.00s)
    --- PASS: TestRename/renameDir (0.04s)
=== RUN   TestTruncate
=== RUN   TestTruncate/invalidMount
=== RUN   TestTruncate/invalidSize
=== RUN   TestTruncate/invalidPath
=== RUN   TestTruncate/valid
--- PASS: TestTruncate (0.06s)
    --- PASS: TestTruncate/invalidMount (0.00s)
    --- PASS: TestTruncate/invalidSize (0.00s)
    --- PASS: TestTruncate/invalidPath (0.00s)
    --- PASS: TestTruncate/valid (0.01s)
=== RUN   TestGetSetXattrPath
=== RUN   TestGetSetXattrPath/roundTrip-user.xPhrase
=== RUN   TestGetSetXattrPath/roundTrip-user.xHasNulls
=== RUN   TestGetSetXattrPath/roundTrip-user.x2kZeros
=== RUN   TestGetSetXattrPath/roundTrip-user.xEmpty
=== RUN   TestGetSetXattrPath/missingXattrOnGet
=== RUN   TestGetSetXattrPath/emptyNameGet
=== RUN   TestGetSetXattrPath/emptyNameSet
=== RUN   TestGetSetXattrPath/invalidMount
--- PASS: TestGetSetXattrPath (0.06s)
    --- PASS: TestGetSetXattrPath/roundTrip-user.xPhrase (0.00s)
    --- PASS: TestGetSetXattrPath/roundTrip-user.xHasNulls (0.00s)
    --- PASS: TestGetSetXattrPath/roundTrip-user.x2kZeros (0.01s)
    --- PASS: TestGetSetXattrPath/roundTrip-user.xEmpty (0.00s)
    --- PASS: TestGetSetXattrPath/missingXattrOnGet (0.00s)
    --- PASS: TestGetSetXattrPath/emptyNameGet (0.00s)
    --- PASS: TestGetSetXattrPath/emptyNameSet (0.00s)
    --- PASS: TestGetSetXattrPath/invalidMount (0.00s)
=== RUN   TestListXattrPath
=== RUN   TestListXattrPath/listXattrs1
=== RUN   TestListXattrPath/listXattrs2
=== RUN   TestListXattrPath/invalidMount
--- PASS: TestListXattrPath (0.06s)
    --- PASS: TestListXattrPath/listXattrs1 (0.00s)
    --- PASS: TestListXattrPath/listXattrs2 (0.01s)
    --- PASS: TestListXattrPath/invalidMount (0.00s)
=== RUN   TestRemoveXattrPath
=== RUN   TestRemoveXattrPath/removeXattr
=== RUN   TestRemoveXattrPath/removeMissingXattr
=== RUN   TestRemoveXattrPath/emptyName
=== RUN   TestRemoveXattrPath/invalidMount
--- PASS: TestRemoveXattrPath (0.05s)
    --- PASS: TestRemoveXattrPath/removeXattr (0.01s)
    --- PASS: TestRemoveXattrPath/removeMissingXattr (0.00s)
    --- PASS: TestRemoveXattrPath/emptyName (0.00s)
    --- PASS: TestRemoveXattrPath/invalidMount (0.00s)
=== RUN   TestGetSetXattrLinkPath
=== RUN   TestGetSetXattrLinkPath/roundTrip-user.xPhrase
=== RUN   TestGetSetXattrLinkPath/roundTrip-user.xHasNulls
=== RUN   TestGetSetXattrLinkPath/roundTrip-user.x2kZeros
=== RUN   TestGetSetXattrLinkPath/roundTrip-user.xEmpty
=== RUN   TestGetSetXattrLinkPath/linkVsFile
=== RUN   TestGetSetXattrLinkPath/missingXattrOnGet
=== RUN   TestGetSetXattrLinkPath/emptyNameGet
=== RUN   TestGetSetXattrLinkPath/emptyNameSet
=== RUN   TestGetSetXattrLinkPath/invalidMount
--- PASS: TestGetSetXattrLinkPath (0.08s)
    --- PASS: TestGetSetXattrLinkPath/roundTrip-user.xPhrase (0.01s)
    --- PASS: TestGetSetXattrLinkPath/roundTrip-user.xHasNulls (0.00s)
    --- PASS: TestGetSetXattrLinkPath/roundTrip-user.x2kZeros (0.01s)
    --- PASS: TestGetSetXattrLinkPath/roundTrip-user.xEmpty (0.00s)
    --- PASS: TestGetSetXattrLinkPath/linkVsFile (0.01s)
    --- PASS: TestGetSetXattrLinkPath/missingXattrOnGet (0.00s)
    --- PASS: TestGetSetXattrLinkPath/emptyNameGet (0.00s)
    --- PASS: TestGetSetXattrLinkPath/emptyNameSet (0.00s)
    --- PASS: TestGetSetXattrLinkPath/invalidMount (0.00s)
=== RUN   TestListXattrLinkPath
=== RUN   TestListXattrLinkPath/listXattrs1
=== RUN   TestListXattrLinkPath/listXattrs2
=== RUN   TestListXattrLinkPath/invalidMount
--- PASS: TestListXattrLinkPath (0.06s)
    --- PASS: TestListXattrLinkPath/listXattrs1 (0.01s)
    --- PASS: TestListXattrLinkPath/listXattrs2 (0.01s)
    --- PASS: TestListXattrLinkPath/invalidMount (0.00s)
=== RUN   TestRemoveXattrLinkPath
=== RUN   TestRemoveXattrLinkPath/removeXattr
=== RUN   TestRemoveXattrLinkPath/removeMissingXattr
=== RUN   TestRemoveXattrLinkPath/emptyName
=== RUN   TestRemoveXattrLinkPath/invalidMount
--- PASS: TestRemoveXattrLinkPath (0.05s)
    --- PASS: TestRemoveXattrLinkPath/removeXattr (0.01s)
    --- PASS: TestRemoveXattrLinkPath/removeMissingXattr (0.00s)
    --- PASS: TestRemoveXattrLinkPath/emptyName (0.00s)
    --- PASS: TestRemoveXattrLinkPath/invalidMount (0.00s)
=== RUN   TestChmodDir
--- PASS: TestChmodDir (0.04s)
=== RUN   TestChown
--- PASS: TestChown (0.04s)
=== RUN   TestLchown
--- PASS: TestLchown (0.05s)
=== RUN   TestStatFSRootDir
=== RUN   TestStatFSRootDir/invalid
=== RUN   TestStatFSRootDir/valid
--- PASS: TestStatFSRootDir (0.03s)
    --- PASS: TestStatFSRootDir/invalid (0.00s)
    --- PASS: TestStatFSRootDir/valid (0.03s)
=== RUN   TestStatxFieldsRootDir
--- PASS: TestStatxFieldsRootDir (0.02s)
=== RUN   TestUserPerm
=== RUN   TestUserPerm/newAndDestroy
=== RUN   TestUserPerm/notManagedDestroy
=== RUN   TestUserPerm/tryForceGc
=== RUN   TestUserPerm/gidList
--- PASS: TestUserPerm (0.00s)
    --- PASS: TestUserPerm/newAndDestroy (0.00s)
    --- PASS: TestUserPerm/notManagedDestroy (0.00s)
    --- PASS: TestUserPerm/tryForceGc (0.00s)
    --- PASS: TestUserPerm/gidList (0.00s)
PASS
coverage: 98.0% of statements in github.com/ceph/go-ceph/cephfs
ok      github.com/ceph/go-ceph/cephfs  17.144s coverage: 98.0% of statements in github.com/ceph/go-ceph/cephfs
*** running: go vet -tags octopus ./cephfs/admin
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=cephfs/admin.cover.out -coverpkg=github.com/ceph/go-ceph/cephfs/admin ./cephfs/admin
=== RUN   TestParseCloneStatus
=== RUN   TestParseCloneStatus/error
=== RUN   TestParseCloneStatus/statusSet
=== RUN   TestParseCloneStatus/badJSON
=== RUN   TestParseCloneStatus/okPending
=== RUN   TestParseCloneStatus/okInProg
--- PASS: TestParseCloneStatus (0.00s)
    --- PASS: TestParseCloneStatus/error (0.00s)
    --- PASS: TestParseCloneStatus/statusSet (0.00s)
    --- PASS: TestParseCloneStatus/badJSON (0.00s)
    --- PASS: TestParseCloneStatus/okPending (0.00s)
    --- PASS: TestParseCloneStatus/okInProg (0.00s)
=== RUN   TestCloneSubVolumeSnapshot
--- PASS: TestCloneSubVolumeSnapshot (0.51s)
=== RUN   TestCancelClone
--- PASS: TestCancelClone (0.28s)
=== RUN   TestServerSentinel
--- PASS: TestServerSentinel (0.00s)
=== RUN   TestInvalidFSAdmin
--- PASS: TestInvalidFSAdmin (0.00s)
=== RUN   TestBadMarshal
--- PASS: TestBadMarshal (0.00s)
=== RUN   TestParseListNames
=== RUN   TestParseListNames/error
=== RUN   TestParseListNames/statusSet
=== RUN   TestParseListNames/badJSON
=== RUN   TestParseListNames/ok
--- PASS: TestParseListNames (0.00s)
    --- PASS: TestParseListNames/error (0.00s)
    --- PASS: TestParseListNames/statusSet (0.00s)
    --- PASS: TestParseListNames/badJSON (0.00s)
    --- PASS: TestParseListNames/ok (0.00s)
=== RUN   TestCheckEmptyResponseExpected
=== RUN   TestCheckEmptyResponseExpected/error
=== RUN   TestCheckEmptyResponseExpected/statusSet
=== RUN   TestCheckEmptyResponseExpected/someJSON
=== RUN   TestCheckEmptyResponseExpected/ok
--- PASS: TestCheckEmptyResponseExpected (0.00s)
    --- PASS: TestCheckEmptyResponseExpected/error (0.00s)
    --- PASS: TestCheckEmptyResponseExpected/statusSet (0.00s)
    --- PASS: TestCheckEmptyResponseExpected/someJSON (0.00s)
    --- PASS: TestCheckEmptyResponseExpected/ok (0.00s)
=== RUN   TestCreateSubVolume
=== RUN   TestCreateSubVolume/simple
=== RUN   TestCreateSubVolume/options
=== RUN   TestCreateSubVolume/withGroup
=== RUN   TestCreateSubVolume/groupAndOptions
--- PASS: TestCreateSubVolume (0.49s)
    --- PASS: TestCreateSubVolume/simple (0.06s)
    --- PASS: TestCreateSubVolume/options (0.04s)
    --- PASS: TestCreateSubVolume/withGroup (0.06s)
    --- PASS: TestCreateSubVolume/groupAndOptions (0.05s)
=== RUN   TestRemoveSubVolume
=== RUN   TestRemoveSubVolume/standard
=== RUN   TestRemoveSubVolume/force
=== RUN   TestRemoveSubVolume/withFlagsEmpty
=== RUN   TestRemoveSubVolume/withFlagsForce
=== RUN   TestRemoveSubVolume/withFlagsRetainSnaps
=== RUN   TestRemoveSubVolume/retainedSnapshotsTest
--- PASS: TestRemoveSubVolume (1.32s)
    --- PASS: TestRemoveSubVolume/standard (0.11s)
    --- PASS: TestRemoveSubVolume/force (0.11s)
    --- PASS: TestRemoveSubVolume/withFlagsEmpty (0.12s)
    --- PASS: TestRemoveSubVolume/withFlagsForce (0.11s)
    --- PASS: TestRemoveSubVolume/withFlagsRetainSnaps (0.11s)
    --- PASS: TestRemoveSubVolume/retainedSnapshotsTest (0.77s)
=== RUN   TestResizeSubVolume
--- PASS: TestResizeSubVolume (0.08s)
=== RUN   TestSubVolumePath
--- PASS: TestSubVolumePath (0.07s)
=== RUN   TestParseSubVolumeInfo
=== RUN   TestParseSubVolumeInfo/error
=== RUN   TestParseSubVolumeInfo/statusSet
=== RUN   TestParseSubVolumeInfo/ok
=== RUN   TestParseSubVolumeInfo/ok2
=== RUN   TestParseSubVolumeInfo/ok3
=== RUN   TestParseSubVolumeInfo/ok4
=== RUN   TestParseSubVolumeInfo/invalidBytesQuotaValue
=== RUN   TestParseSubVolumeInfo/invalidBytesQuotaType
--- PASS: TestParseSubVolumeInfo (0.00s)
    --- PASS: TestParseSubVolumeInfo/error (0.00s)
    --- PASS: TestParseSubVolumeInfo/statusSet (0.00s)
    --- PASS: TestParseSubVolumeInfo/ok (0.00s)
    --- PASS: TestParseSubVolumeInfo/ok2 (0.00s)
    --- PASS: TestParseSubVolumeInfo/ok3 (0.00s)
    --- PASS: TestParseSubVolumeInfo/ok4 (0.00s)
    --- PASS: TestParseSubVolumeInfo/invalidBytesQuotaValue (0.00s)
    --- PASS: TestParseSubVolumeInfo/invalidBytesQuotaType (0.00s)
=== RUN   TestSubVolumeInfo
--- PASS: TestSubVolumeInfo (0.08s)
=== RUN   TestSubVolumeSnapshots
=== RUN   TestSubVolumeSnapshots/createAndRemove
=== RUN   TestSubVolumeSnapshots/createAndForceRemove
=== RUN   TestSubVolumeSnapshots/listOne
=== RUN   TestSubVolumeSnapshots/listTwo
--- PASS: TestSubVolumeSnapshots (0.26s)
    --- PASS: TestSubVolumeSnapshots/createAndRemove (0.03s)
    --- PASS: TestSubVolumeSnapshots/createAndForceRemove (0.04s)
    --- PASS: TestSubVolumeSnapshots/listOne (0.05s)
    --- PASS: TestSubVolumeSnapshots/listTwo (0.08s)
=== RUN   TestParseSubVolumeSnapshotInfo
=== RUN   TestParseSubVolumeSnapshotInfo/error
=== RUN   TestParseSubVolumeSnapshotInfo/statusSet
=== RUN   TestParseSubVolumeSnapshotInfo/badJSON
=== RUN   TestParseSubVolumeSnapshotInfo/ok
--- PASS: TestParseSubVolumeSnapshotInfo (0.00s)
    --- PASS: TestParseSubVolumeSnapshotInfo/error (0.00s)
    --- PASS: TestParseSubVolumeSnapshotInfo/statusSet (0.00s)
    --- PASS: TestParseSubVolumeSnapshotInfo/badJSON (0.00s)
    --- PASS: TestParseSubVolumeSnapshotInfo/ok (0.00s)
=== RUN   TestSubVolumeSnapshotInfo
--- PASS: TestSubVolumeSnapshotInfo (0.14s)
=== RUN   TestCreateSubVolumeGroup
=== RUN   TestCreateSubVolumeGroup/simple
=== RUN   TestCreateSubVolumeGroup/options1
=== RUN   TestCreateSubVolumeGroup/options2
--- PASS: TestCreateSubVolumeGroup (0.08s)
    --- PASS: TestCreateSubVolumeGroup/simple (0.02s)
    --- PASS: TestCreateSubVolumeGroup/options1 (0.02s)
    --- PASS: TestCreateSubVolumeGroup/options2 (0.02s)
=== RUN   TestRemoveSubVolumeGroup
=== RUN   TestRemoveSubVolumeGroup/standard
=== RUN   TestRemoveSubVolumeGroup/force
--- PASS: TestRemoveSubVolumeGroup (0.09s)
    --- PASS: TestRemoveSubVolumeGroup/standard (0.04s)
    --- PASS: TestRemoveSubVolumeGroup/force (0.05s)
=== RUN   TestSubVolumeGroupPath
--- PASS: TestSubVolumeGroupPath (0.02s)
=== RUN   TestTimeStampUnmarshal
=== RUN   TestTimeStampUnmarshal/valid
=== RUN   TestTimeStampUnmarshal/badType
=== RUN   TestTimeStampUnmarshal/badValue
--- PASS: TestTimeStampUnmarshal (0.00s)
    --- PASS: TestTimeStampUnmarshal/valid (0.00s)
    --- PASS: TestTimeStampUnmarshal/badType (0.00s)
    --- PASS: TestTimeStampUnmarshal/badValue (0.00s)
=== RUN   TestTimeStampString
--- PASS: TestTimeStampString (0.00s)
=== RUN   TestListVolumes
--- PASS: TestListVolumes (0.00s)
=== RUN   TestEnumerateVolumes
--- PASS: TestEnumerateVolumes (0.00s)
=== RUN   TestParseDumpToIdents
=== RUN   TestParseDumpToIdents/error
=== RUN   TestParseDumpToIdents/badStatus
=== RUN   TestParseDumpToIdents/oneVolOk
=== RUN   TestParseDumpToIdents/twoVolOk
=== RUN   TestParseDumpToIdents/unexpectedStatus
--- PASS: TestParseDumpToIdents (0.00s)
    --- PASS: TestParseDumpToIdents/error (0.00s)
    --- PASS: TestParseDumpToIdents/badStatus (0.00s)
    --- PASS: TestParseDumpToIdents/oneVolOk (0.00s)
    --- PASS: TestParseDumpToIdents/twoVolOk (0.00s)
    --- PASS: TestParseDumpToIdents/unexpectedStatus (0.00s)
=== RUN   TestVolumeStatus
--- PASS: TestVolumeStatus (0.00s)
=== RUN   TestVolumeStatusInvalid
    volume_test.go:193: can only excecute on nautilus servers
--- SKIP: TestVolumeStatusInvalid (0.00s)
=== RUN   TestParseVolumeStatus
=== RUN   TestParseVolumeStatus/error
=== RUN   TestParseVolumeStatus/statusSet
=== RUN   TestParseVolumeStatus/badJSON
=== RUN   TestParseVolumeStatus/ok
=== RUN   TestParseVolumeStatus/notJSONfromServer
--- PASS: TestParseVolumeStatus (0.00s)
    --- PASS: TestParseVolumeStatus/error (0.00s)
    --- PASS: TestParseVolumeStatus/statusSet (0.00s)
    --- PASS: TestParseVolumeStatus/badJSON (0.00s)
    --- PASS: TestParseVolumeStatus/ok (0.00s)
    --- PASS: TestParseVolumeStatus/notJSONfromServer (0.00s)
=== RUN   TestParseFsList
=== RUN   TestParseFsList/error
=== RUN   TestParseFsList/statusSet
=== RUN   TestParseFsList/badJSON
=== RUN   TestParseFsList/ok1
=== RUN   TestParseFsList/ok2
--- PASS: TestParseFsList (0.00s)
    --- PASS: TestParseFsList/error (0.00s)
    --- PASS: TestParseFsList/statusSet (0.00s)
    --- PASS: TestParseFsList/badJSON (0.00s)
    --- PASS: TestParseFsList/ok1 (0.00s)
    --- PASS: TestParseFsList/ok2 (0.00s)
=== RUN   TestListFileSystems
--- PASS: TestListFileSystems (0.00s)
=== RUN   TestWorkflow
--- PASS: TestWorkflow (1.49s)
PASS
coverage: 90.7% of statements in github.com/ceph/go-ceph/cephfs/admin
ok      github.com/ceph/go-ceph/cephfs/admin    4.968s  coverage: 90.7% of statements in github.com/ceph/go-ceph/cephfs/admin
*** running: go vet -tags octopus ./internal/callbacks
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=internal/callbacks.cover.out -coverpkg=github.com/ceph/go-ceph/internal/callbacks ./internal/callbacks
=== RUN   TestCallbacks
--- PASS: TestCallbacks (0.00s)
=== RUN   TestCallbacksIndexing
--- PASS: TestCallbacksIndexing (0.00s)
=== RUN   TestCallbacksData
--- PASS: TestCallbacksData (0.00s)
PASS
coverage: 100.0% of statements in github.com/ceph/go-ceph/internal/callbacks
ok      github.com/ceph/go-ceph/internal/callbacks      0.006s  coverage: 100.0% of statements in github.com/ceph/go-ceph/internal/callbacks
*** running: go vet -tags octopus ./internal/commands
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=internal/commands.cover.out -coverpkg=github.com/ceph/go-ceph/internal/commands ./internal/commands
=== RUN   TestResponse
=== RUN   TestResponse/ok
=== RUN   TestResponse/error
=== RUN   TestResponse/unwrap
=== RUN   TestResponse/status
=== RUN   TestResponse/end
=== RUN   TestResponse/noStatus
=== RUN   TestResponse/noBody
=== RUN   TestResponse/noData
=== RUN   TestResponse/filterDeprecated
=== RUN   TestResponse/unmarshal
=== RUN   TestResponse/newResponse
=== RUN   TestResponse/notImplemented
--- PASS: TestResponse (0.00s)
    --- PASS: TestResponse/ok (0.00s)
    --- PASS: TestResponse/error (0.00s)
    --- PASS: TestResponse/unwrap (0.00s)
    --- PASS: TestResponse/status (0.00s)
    --- PASS: TestResponse/end (0.00s)
    --- PASS: TestResponse/noStatus (0.00s)
    --- PASS: TestResponse/noBody (0.00s)
    --- PASS: TestResponse/noData (0.00s)
    --- PASS: TestResponse/filterDeprecated (0.00s)
    --- PASS: TestResponse/unmarshal (0.00s)
    --- PASS: TestResponse/newResponse (0.00s)
    --- PASS: TestResponse/notImplemented (0.00s)
PASS
coverage: 45.6% of statements in github.com/ceph/go-ceph/internal/commands
ok      github.com/ceph/go-ceph/internal/commands       0.020s  coverage: 45.6% of statements in github.com/ceph/go-ceph/internal/commands
*** running: go vet -tags octopus ./internal/cutil
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=internal/cutil.cover.out -coverpkg=github.com/ceph/go-ceph/internal/cutil ./internal/cutil
=== RUN   TestCommandInput
=== RUN   TestCommandInput/newAndFree
=== RUN   TestCommandInput/cmd
=== RUN   TestCommandInput/cmd2
=== RUN   TestCommandInput/noInBuf
=== RUN   TestCommandInput/hasInBuf
--- PASS: TestCommandInput (0.00s)
    --- PASS: TestCommandInput/newAndFree (0.00s)
    --- PASS: TestCommandInput/cmd (0.00s)
    --- PASS: TestCommandInput/cmd2 (0.00s)
    --- PASS: TestCommandInput/noInBuf (0.00s)
    --- PASS: TestCommandInput/hasInBuf (0.00s)
=== RUN   TestCommandOutput
=== RUN   TestCommandOutput/newAndFree
=== RUN   TestCommandOutput/setValues
=== RUN   TestCommandOutput/setOnlyOutBuf
=== RUN   TestCommandOutput/setOnlyOuts
=== RUN   TestCommandOutput/customFreeFunc
--- PASS: TestCommandOutput (0.00s)
    --- PASS: TestCommandOutput/newAndFree (0.00s)
    --- PASS: TestCommandOutput/setValues (0.00s)
    --- PASS: TestCommandOutput/setOnlyOutBuf (0.00s)
    --- PASS: TestCommandOutput/setOnlyOuts (0.00s)
    --- PASS: TestCommandOutput/customFreeFunc (0.00s)
=== RUN   TestCPtrCSlice
=== RUN   TestCPtrCSlice/Size
=== RUN   TestCPtrCSlice/Fill
=== RUN   TestCPtrCSlice/OutOfBound
=== RUN   TestCPtrCSlice/FreeSetsNil
=== RUN   TestCPtrCSlice/EmptySlice
--- PASS: TestCPtrCSlice (0.00s)
    --- PASS: TestCPtrCSlice/Size (0.00s)
    --- PASS: TestCPtrCSlice/Fill (0.00s)
    --- PASS: TestCPtrCSlice/OutOfBound (0.00s)
    --- PASS: TestCPtrCSlice/FreeSetsNil (0.00s)
    --- PASS: TestCPtrCSlice/EmptySlice (0.00s)
=== RUN   TestSizeTCSlice
=== RUN   TestSizeTCSlice/Size
=== RUN   TestSizeTCSlice/Fill
=== RUN   TestSizeTCSlice/OutOfBound
=== RUN   TestSizeTCSlice/FreeSetsNil
=== RUN   TestSizeTCSlice/EmptySlice
--- PASS: TestSizeTCSlice (0.01s)
    --- PASS: TestSizeTCSlice/Size (0.00s)
    --- PASS: TestSizeTCSlice/Fill (0.01s)
    --- PASS: TestSizeTCSlice/OutOfBound (0.00s)
    --- PASS: TestSizeTCSlice/FreeSetsNil (0.00s)
    --- PASS: TestSizeTCSlice/EmptySlice (0.00s)
=== RUN   TestIovec
--- PASS: TestIovec (0.00s)
=== RUN   TestPtrGuard
=== RUN   TestPtrGuard/storeAndRelease
=== RUN   TestPtrGuard/multiRelease
=== RUN   TestPtrGuard/uintptrescapesTest
=== RUN   TestPtrGuard/stressTest
--- PASS: TestPtrGuard (3.61s)
    --- PASS: TestPtrGuard/storeAndRelease (0.00s)
    --- PASS: TestPtrGuard/multiRelease (0.00s)
    --- PASS: TestPtrGuard/uintptrescapesTest (0.01s)
    --- PASS: TestPtrGuard/stressTest (3.60s)
=== RUN   TestSplitBufStrings
--- PASS: TestSplitBufStrings (0.00s)
PASS
coverage: 99.2% of statements in github.com/ceph/go-ceph/internal/cutil
ok      github.com/ceph/go-ceph/internal/cutil  3.637s  coverage: 99.2% of statements in github.com/ceph/go-ceph/internal/cutil
*** running: go vet -tags octopus ./internal/errutil
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=internal/errutil.cover.out -coverpkg=github.com/ceph/go-ceph/internal/errutil ./internal/errutil
=== RUN   TestFormatError
--- PASS: TestFormatError (0.00s)
=== RUN   TestFormatErrorCode
--- PASS: TestFormatErrorCode (0.00s)
PASS
coverage: 100.0% of statements in github.com/ceph/go-ceph/internal/errutil
ok      github.com/ceph/go-ceph/internal/errutil        0.005s  coverage: 100.0% of statements in github.com/ceph/go-ceph/internal/errutil
*** running: go vet -tags octopus ./internal/retry
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=internal/retry.cover.out -coverpkg=github.com/ceph/go-ceph/internal/retry ./internal/retry
=== RUN   TestSizer
=== RUN   TestSizer/bcopy_0
=== RUN   TestSizer/bcopy_1
=== RUN   TestSizer/bcopy_2
=== RUN   TestSizer/bcopy_3
=== RUN   TestSizer/bcopy_hint_0
=== RUN   TestSizer/bcopy_hint_1
=== RUN   TestSizer/bcopy_hint_2
=== RUN   TestSizer/bcopy_hint_3
=== RUN   TestSizer/exceedsMax
=== RUN   TestSizer/hintExceedsMax
=== RUN   TestSizer/weirdSizeAndMax
=== RUN   TestSizer/sizeExceedsMax
--- PASS: TestSizer (0.00s)
    --- PASS: TestSizer/bcopy_0 (0.00s)
    --- PASS: TestSizer/bcopy_1 (0.00s)
    --- PASS: TestSizer/bcopy_2 (0.00s)
    --- PASS: TestSizer/bcopy_3 (0.00s)
    --- PASS: TestSizer/bcopy_hint_0 (0.00s)
    --- PASS: TestSizer/bcopy_hint_1 (0.00s)
    --- PASS: TestSizer/bcopy_hint_2 (0.00s)
    --- PASS: TestSizer/bcopy_hint_3 (0.00s)
    --- PASS: TestSizer/exceedsMax (0.00s)
    --- PASS: TestSizer/hintExceedsMax (0.00s)
    --- PASS: TestSizer/weirdSizeAndMax (0.00s)
    --- PASS: TestSizer/sizeExceedsMax (0.00s)
=== RUN   ExampleWithSizes
--- PASS: ExampleWithSizes (0.00s)
=== RUN   ExampleWithSizes_hint
--- PASS: ExampleWithSizes_hint (0.00s)
PASS
coverage: 100.0% of statements in github.com/ceph/go-ceph/internal/retry
ok      github.com/ceph/go-ceph/internal/retry  0.007s  coverage: 100.0% of statements in github.com/ceph/go-ceph/internal/retry
*** running: go vet -tags octopus ./internal/timespec
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=internal/timespec.cover.out -coverpkg=github.com/ceph/go-ceph/internal/timespec ./internal/timespec
?       github.com/ceph/go-ceph/internal/timespec       [no test files]
*** running: go vet -tags octopus ./rados
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=rados.cover.out -coverpkg=github.com/ceph/go-ceph/rados ./rados
=== RUN   TestRadosError
--- PASS: TestRadosError (0.00s)
=== RUN   TestOperationError
--- PASS: TestOperationError (0.00s)
=== RUN   TestOpStepFinalizer
--- PASS: TestOpStepFinalizer (0.00s)
=== RUN   TestOperationType
=== RUN   TestOperationType/stepErrors
=== RUN   TestOperationType/opError
=== RUN   TestOperationType/noErrors
--- PASS: TestOperationType (0.00s)
    --- PASS: TestOperationType/stepErrors (0.00s)
    --- PASS: TestOperationType/opError (0.00s)
    --- PASS: TestOperationType/noErrors (0.00s)
=== RUN   TestVersion
--- PASS: TestVersion (0.00s)
=== RUN   TestRadosTestSuite
=== RUN   TestRadosTestSuite/TestAppend
=== RUN   TestRadosTestSuite/TestCreate
=== RUN   TestRadosTestSuite/TestCreateRemoveSnapshot
=== RUN   TestRadosTestSuite/TestCreateRemoveSnapshot/invalidIOCtx
=== RUN   TestRadosTestSuite/TestCreateRemoveSnapshot/NewSnap
=== RUN   TestRadosTestSuite/TestCreateRemoveSnapshot/ExistingSnap
=== RUN   TestRadosTestSuite/TestCreateRemoveSnapshot/NonExistingSnap
=== RUN   TestRadosTestSuite/TestCreateRemoveSnapshot/EmptySnapNameString
=== RUN   TestRadosTestSuite/TestDeleteNotFound
=== RUN   TestRadosTestSuite/TestGetClusterStats
prev_stat: {Kb:1048576 Kb_used:3066 Kb_avail:1045509 Num_objects:214}
curr_stat: {Kb:1048576 Kb_used:3066 Kb_avail:1045509 Num_objects:214} (trying again...)
curr_stat: {Kb:1048576 Kb_used:13332 Kb_avail:1035243 Num_objects:224} (change detected)
=== RUN   TestRadosTestSuite/TestGetFSID
=== RUN   TestRadosTestSuite/TestGetInstanceID
=== RUN   TestRadosTestSuite/TestGetLargePoolList
=== RUN   TestRadosTestSuite/TestGetLastVersion
=== RUN   TestRadosTestSuite/TestGetLastVersion/write
=== RUN   TestRadosTestSuite/TestGetLastVersion/writeAndRead
=== RUN   TestRadosTestSuite/TestGetLastVersion/writeAndReadMultiple
=== RUN   TestRadosTestSuite/TestGetLastVersion/invalidIOContext
=== RUN   TestRadosTestSuite/TestGetPoolByID
=== RUN   TestRadosTestSuite/TestGetPoolByName
=== RUN   TestRadosTestSuite/TestGetPoolID
=== RUN   TestRadosTestSuite/TestGetPoolName
=== RUN   TestRadosTestSuite/TestGetPoolStats
prev_stat: {Num_bytes:10485859 Num_kb:10241 Num_objects:12 Num_object_clones:0 Num_object_copies:12 Num_objects_missing_on_primary:0 Num_objects_unfound:0 Num_objects_degraded:0 Num_rd:3 Num_rd_kb:3 Num_wr:13 Num_wr_kb:10243}
curr_stat: {Num_bytes:10485859 Num_kb:10241 Num_objects:12 Num_object_clones:0 Num_object_copies:12 Num_objects_missing_on_primary:0 Num_objects_unfound:0 Num_objects_degraded:0 Num_rd:3 Num_rd_kb:3 Num_wr:13 Num_wr_kb:10243} (trying again...)
curr_stat: {Num_bytes:10485859 Num_kb:10241 Num_objects:12 Num_object_clones:0 Num_object_copies:12 Num_objects_missing_on_primary:0 Num_objects_unfound:0 Num_objects_degraded:0 Num_rd:3 Num_rd_kb:3 Num_wr:13 Num_wr_kb:10243} (trying again...)
curr_stat: {Num_bytes:20971619 Num_kb:20481 Num_objects:22 Num_object_clones:0 Num_object_copies:22 Num_objects_missing_on_primary:0 Num_objects_unfound:0 Num_objects_degraded:0 Num_rd:8 Num_rd_kb:8 Num_wr:39 Num_wr_kb:20492} (change detected)
=== RUN   TestRadosTestSuite/TestGetSetConfigOption
=== RUN   TestRadosTestSuite/TestListAcrossNamespaces
=== RUN   TestRadosTestSuite/TestListSnapshot
=== RUN   TestRadosTestSuite/TestListSnapshot/invalidIOContext
=== RUN   TestRadosTestSuite/TestListSnapshot/NumberOfSnapshots
=== RUN   TestRadosTestSuite/TestListSnapshot/MatchSnapNamesWithID
=== RUN   TestRadosTestSuite/TestListXattrs
=== RUN   TestRadosTestSuite/TestLocking
=== RUN   TestRadosTestSuite/TestMakeDeletePool
=== RUN   TestRadosTestSuite/TestMgrCommand
=== RUN   TestRadosTestSuite/TestMgrCommandDescriptions
=== RUN   TestRadosTestSuite/TestMgrCommandMalformedCommand
=== RUN   TestRadosTestSuite/TestMgrCommandWithInputBuffer
=== RUN   TestRadosTestSuite/TestMonCommand
=== RUN   TestRadosTestSuite/TestMonCommandTarget
=== RUN   TestRadosTestSuite/TestMonCommandTargetDescriptions
=== RUN   TestRadosTestSuite/TestMonCommandTargetMalformedCommand
=== RUN   TestRadosTestSuite/TestMonCommandWithInputBuffer
=== RUN   TestRadosTestSuite/TestNewConnWithClusterAndUser
=== RUN   TestRadosTestSuite/TestNewConnWithUser
=== RUN   TestRadosTestSuite/TestObjectIterator
=== RUN   TestRadosTestSuite/TestObjectIteratorAcrossNamespaces
=== RUN   TestRadosTestSuite/TestObjectListObjects
=== RUN   TestRadosTestSuite/TestObjectStat
=== RUN   TestRadosTestSuite/TestOmapOnNonexistentObjectError
=== RUN   TestRadosTestSuite/TestOpenIOContextInvalidPool
=== RUN   TestRadosTestSuite/TestOsdCommand
=== RUN   TestRadosTestSuite/TestOsdCommandDescriptions
=== RUN   TestRadosTestSuite/TestOsdCommandMalformedCommand
=== RUN   TestRadosTestSuite/TestPGCommand
=== RUN   TestRadosTestSuite/TestParseCmdLineArgs
=== RUN   TestRadosTestSuite/TestParseConfigArgv
=== RUN   TestRadosTestSuite/TestParseDefaultConfigEnv
=== RUN   TestRadosTestSuite/TestPingMonitor
=== RUN   TestRadosTestSuite/TestReadConfigFile
=== RUN   TestRadosTestSuite/TestReadFilterOmap
=== RUN   TestRadosTestSuite/TestReadNotFound
=== RUN   TestRadosTestSuite/TestReadOpAssertExists
=== RUN   TestRadosTestSuite/TestReadOpGetOmapValues
=== RUN   TestRadosTestSuite/TestReadOpGetOmapValues/simple
=== RUN   TestRadosTestSuite/TestReadOpGetOmapValues/twoIterations
=== RUN   TestRadosTestSuite/TestReadOpGetOmapValues/checkForMore
=== RUN   TestRadosTestSuite/TestReadOpGetOmapValues/iterateTooEarly
=== RUN   TestRadosTestSuite/TestReadWrite
=== RUN   TestRadosTestSuite/TestReadWriteOmap
=== RUN   TestRadosTestSuite/TestReadWriteXattr
=== RUN   TestRadosTestSuite/TestRmXattr
=== RUN   TestRadosTestSuite/TestRollbackSnapshot
=== RUN   TestRadosTestSuite/TestRollbackSnapshot/InvalidArgs
=== RUN   TestRadosTestSuite/TestRollbackSnapshot/invalidIOContext
=== RUN   TestRadosTestSuite/TestRollbackSnapshot/WriteAndRollback
=== RUN   TestRadosTestSuite/TestSetGetNamespace
=== RUN   TestRadosTestSuite/TestSetGetNamespace/validNS
=== RUN   TestRadosTestSuite/TestSetGetNamespace/allNamespaces
=== RUN   TestRadosTestSuite/TestSetGetNamespace/invalidIoctx
=== RUN   TestRadosTestSuite/TestSetNamespace
=== RUN   TestRadosTestSuite/TestSetReadSnapshot
=== RUN   TestRadosTestSuite/TestSetReadSnapshot/invalidIOContext
=== RUN   TestRadosTestSuite/TestSnapshotIDFunctions
=== RUN   TestRadosTestSuite/TestSnapshotIDFunctions/invalidIOCtx
=== RUN   TestRadosTestSuite/TestSnapshotIDFunctions/InvalidArgs
=== RUN   TestRadosTestSuite/TestSnapshotIDFunctions/ValidSnapIDOps
=== RUN   TestRadosTestSuite/TestStatNotFound
=== RUN   TestRadosTestSuite/TestWaitForLatestOSDMap
=== RUN   TestRadosTestSuite/TestWriteOpAssertExists
=== RUN   TestRadosTestSuite/TestWriteOpCleanOmap
=== RUN   TestRadosTestSuite/TestWriteOpCreate
=== RUN   TestRadosTestSuite/TestWriteOpCreateWithTimestamp
=== RUN   TestRadosTestSuite/TestWriteOpRmOmapKeys
=== RUN   TestRadosTestSuite/TestWriteOpSetOmap
=== RUN   TestRadosTestSuite/TestWriteOpWrite
=== RUN   TestRadosTestSuite/TestWriteOpWriteFull
=== RUN   TestRadosTestSuite/TestWriteOpWriteSame
--- PASS: TestRadosTestSuite (56.51s)
    --- PASS: TestRadosTestSuite/TestAppend (1.03s)
    --- PASS: TestRadosTestSuite/TestCreate (0.02s)
    --- PASS: TestRadosTestSuite/TestCreateRemoveSnapshot (6.02s)
        --- PASS: TestRadosTestSuite/TestCreateRemoveSnapshot/invalidIOCtx (0.00s)
        --- PASS: TestRadosTestSuite/TestCreateRemoveSnapshot/NewSnap (1.97s)
        --- PASS: TestRadosTestSuite/TestCreateRemoveSnapshot/ExistingSnap (2.02s)
        --- PASS: TestRadosTestSuite/TestCreateRemoveSnapshot/NonExistingSnap (0.00s)
        --- PASS: TestRadosTestSuite/TestCreateRemoveSnapshot/EmptySnapNameString (2.01s)
    --- PASS: TestRadosTestSuite/TestDeleteNotFound (0.02s)
    --- PASS: TestRadosTestSuite/TestGetClusterStats (1.05s)
    --- PASS: TestRadosTestSuite/TestGetFSID (0.00s)
    --- PASS: TestRadosTestSuite/TestGetInstanceID (0.02s)
    --- PASS: TestRadosTestSuite/TestGetLargePoolList (19.95s)
    --- PASS: TestRadosTestSuite/TestGetLastVersion (0.05s)
        --- PASS: TestRadosTestSuite/TestGetLastVersion/write (0.00s)
        --- PASS: TestRadosTestSuite/TestGetLastVersion/writeAndRead (0.01s)
        --- PASS: TestRadosTestSuite/TestGetLastVersion/writeAndReadMultiple (0.01s)
        --- PASS: TestRadosTestSuite/TestGetLastVersion/invalidIOContext (0.00s)
    --- PASS: TestRadosTestSuite/TestGetPoolByID (1.99s)
    --- PASS: TestRadosTestSuite/TestGetPoolByName (2.04s)
    --- PASS: TestRadosTestSuite/TestGetPoolID (0.03s)
    --- PASS: TestRadosTestSuite/TestGetPoolName (0.03s)
    --- PASS: TestRadosTestSuite/TestGetPoolStats (2.07s)
    --- PASS: TestRadosTestSuite/TestGetSetConfigOption (0.00s)
    --- PASS: TestRadosTestSuite/TestListAcrossNamespaces (0.09s)
    --- PASS: TestRadosTestSuite/TestListSnapshot (5.86s)
        --- PASS: TestRadosTestSuite/TestListSnapshot/invalidIOContext (0.00s)
        --- PASS: TestRadosTestSuite/TestListSnapshot/NumberOfSnapshots (0.00s)
        --- PASS: TestRadosTestSuite/TestListSnapshot/MatchSnapNamesWithID (0.00s)
    --- PASS: TestRadosTestSuite/TestListXattrs (0.03s)
    --- PASS: TestRadosTestSuite/TestLocking (2.05s)
    --- PASS: TestRadosTestSuite/TestMakeDeletePool (1.96s)
    --- PASS: TestRadosTestSuite/TestMgrCommand (0.03s)
    --- PASS: TestRadosTestSuite/TestMgrCommandDescriptions (0.04s)
    --- PASS: TestRadosTestSuite/TestMgrCommandMalformedCommand (0.02s)
    --- PASS: TestRadosTestSuite/TestMgrCommandWithInputBuffer (0.05s)
    --- PASS: TestRadosTestSuite/TestMonCommand (0.02s)
    --- PASS: TestRadosTestSuite/TestMonCommandTarget (0.02s)
    --- PASS: TestRadosTestSuite/TestMonCommandTargetDescriptions (0.02s)
    --- PASS: TestRadosTestSuite/TestMonCommandTargetMalformedCommand (0.02s)
    --- PASS: TestRadosTestSuite/TestMonCommandWithInputBuffer (0.05s)
    --- PASS: TestRadosTestSuite/TestNewConnWithClusterAndUser (0.01s)
    --- PASS: TestRadosTestSuite/TestNewConnWithUser (0.01s)
    --- PASS: TestRadosTestSuite/TestObjectIterator (0.08s)
    --- PASS: TestRadosTestSuite/TestObjectIteratorAcrossNamespaces (0.09s)
    --- PASS: TestRadosTestSuite/TestObjectListObjects (0.06s)
    --- PASS: TestRadosTestSuite/TestObjectStat (0.02s)
    --- PASS: TestRadosTestSuite/TestOmapOnNonexistentObjectError (0.02s)
    --- PASS: TestRadosTestSuite/TestOpenIOContextInvalidPool (0.00s)
    --- PASS: TestRadosTestSuite/TestOsdCommand (0.02s)
    --- PASS: TestRadosTestSuite/TestOsdCommandDescriptions (0.02s)
    --- PASS: TestRadosTestSuite/TestOsdCommandMalformedCommand (0.03s)
    --- PASS: TestRadosTestSuite/TestPGCommand (0.02s)
    --- PASS: TestRadosTestSuite/TestParseCmdLineArgs (0.01s)
    --- PASS: TestRadosTestSuite/TestParseConfigArgv (0.01s)
    --- PASS: TestRadosTestSuite/TestParseDefaultConfigEnv (0.01s)
    --- PASS: TestRadosTestSuite/TestPingMonitor (0.03s)
    --- PASS: TestRadosTestSuite/TestReadConfigFile (0.01s)
    --- PASS: TestRadosTestSuite/TestReadFilterOmap (0.03s)
    --- PASS: TestRadosTestSuite/TestReadNotFound (0.03s)
    --- PASS: TestRadosTestSuite/TestReadOpAssertExists (0.04s)
    --- PASS: TestRadosTestSuite/TestReadOpGetOmapValues (0.04s)
        --- PASS: TestRadosTestSuite/TestReadOpGetOmapValues/simple (0.00s)
        --- PASS: TestRadosTestSuite/TestReadOpGetOmapValues/twoIterations (0.00s)
        --- PASS: TestRadosTestSuite/TestReadOpGetOmapValues/checkForMore (0.00s)
        --- PASS: TestRadosTestSuite/TestReadOpGetOmapValues/iterateTooEarly (0.00s)
    --- PASS: TestRadosTestSuite/TestReadWrite (0.03s)
    --- PASS: TestRadosTestSuite/TestReadWriteOmap (0.04s)
    --- PASS: TestRadosTestSuite/TestReadWriteXattr (0.03s)
    --- PASS: TestRadosTestSuite/TestRmXattr (0.04s)
    --- PASS: TestRadosTestSuite/TestRollbackSnapshot (3.64s)
        --- PASS: TestRadosTestSuite/TestRollbackSnapshot/InvalidArgs (1.64s)
        --- PASS: TestRadosTestSuite/TestRollbackSnapshot/invalidIOContext (0.00s)
        --- PASS: TestRadosTestSuite/TestRollbackSnapshot/WriteAndRollback (1.97s)
    --- PASS: TestRadosTestSuite/TestSetGetNamespace (0.02s)
        --- PASS: TestRadosTestSuite/TestSetGetNamespace/validNS (0.00s)
        --- PASS: TestRadosTestSuite/TestSetGetNamespace/allNamespaces (0.00s)
        --- PASS: TestRadosTestSuite/TestSetGetNamespace/invalidIoctx (0.00s)
    --- PASS: TestRadosTestSuite/TestSetNamespace (0.03s)
    --- PASS: TestRadosTestSuite/TestSetReadSnapshot (1.99s)
        --- PASS: TestRadosTestSuite/TestSetReadSnapshot/invalidIOContext (0.00s)
    --- PASS: TestRadosTestSuite/TestSnapshotIDFunctions (4.02s)
        --- PASS: TestRadosTestSuite/TestSnapshotIDFunctions/invalidIOCtx (0.00s)
        --- PASS: TestRadosTestSuite/TestSnapshotIDFunctions/InvalidArgs (1.99s)
        --- PASS: TestRadosTestSuite/TestSnapshotIDFunctions/ValidSnapIDOps (2.01s)
    --- PASS: TestRadosTestSuite/TestStatNotFound (0.02s)
    --- PASS: TestRadosTestSuite/TestWaitForLatestOSDMap (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpAssertExists (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpCleanOmap (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpCreate (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpCreateWithTimestamp (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpRmOmapKeys (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpSetOmap (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpWrite (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpWriteFull (0.02s)
    --- PASS: TestRadosTestSuite/TestWriteOpWriteSame (0.03s)
=== RUN   TestReadOpInvalid
--- PASS: TestReadOpInvalid (0.00s)
=== RUN   TestWriteOpInvalid
--- PASS: TestWriteOpInvalid (0.00s)
PASS
coverage: 93.3% of statements in github.com/ceph/go-ceph/rados
ok      github.com/ceph/go-ceph/rados   56.534s coverage: 93.3% of statements in github.com/ceph/go-ceph/rados
*** running: go vet -tags octopus ./rbd
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=rbd.cover.out -coverpkg=github.com/ceph/go-ceph/rbd ./rbd
=== RUN   TestDiffIterate
=== RUN   TestDiffIterate/basic
=== RUN   TestDiffIterate/twoAtOnce
=== RUN   TestDiffIterate/earlyExit
=== RUN   TestDiffIterate/snapshot
=== RUN   TestDiffIterate/callbackData
=== RUN   TestDiffIterate/badImage
=== RUN   TestDiffIterate/missingCallback
--- PASS: TestDiffIterate (8.60s)
    --- PASS: TestDiffIterate/basic (3.21s)
    --- PASS: TestDiffIterate/twoAtOnce (0.35s)
    --- PASS: TestDiffIterate/earlyExit (0.15s)
    --- PASS: TestDiffIterate/snapshot (3.16s)
    --- PASS: TestDiffIterate/callbackData (0.19s)
    --- PASS: TestDiffIterate/badImage (0.00s)
    --- PASS: TestDiffIterate/missingCallback (0.17s)
=== RUN   TestRBDError
--- PASS: TestRBDError (0.00s)
=== RUN   TestGetFeaturesInMimic
--- PASS: TestGetFeaturesInMimic (0.00s)
=== RUN   TestGetFeaturesInNautilus
--- PASS: TestGetFeaturesInNautilus (0.00s)
=== RUN   TestGetFeatures
=== RUN   TestGetFeatures/compareBits
=== RUN   TestGetFeatures/compareFeatureSet
--- PASS: TestGetFeatures (5.03s)
    --- PASS: TestGetFeatures/compareBits (0.00s)
    --- PASS: TestGetFeatures/compareFeatureSet (0.00s)
=== RUN   TestFeatureSet
--- PASS: TestFeatureSet (0.00s)
=== RUN   TestUpdateFeatures
=== RUN   TestUpdateFeatures/imageNotOpen
=== RUN   TestUpdateFeatures/verifyFeatureEnabled
=== RUN   TestUpdateFeatures/disableFeature
=== RUN   TestUpdateFeatures/enableFeature
--- PASS: TestUpdateFeatures (5.10s)
    --- PASS: TestUpdateFeatures/imageNotOpen (0.02s)
    --- PASS: TestUpdateFeatures/verifyFeatureEnabled (0.00s)
    --- PASS: TestUpdateFeatures/disableFeature (0.01s)
    --- PASS: TestUpdateFeatures/enableFeature (0.01s)
=== RUN   TestGroupSnapshots
=== RUN   TestGroupSnapshots/groupSnapCreateRemove
=== RUN   TestGroupSnapshots/groupSnapRename
=== RUN   TestGroupSnapshots/groupSnappList
=== RUN   TestGroupSnapshots/groupSnapRollback
=== RUN   TestGroupSnapshots/groupSnapRollbackWithProgress
=== RUN   TestGroupSnapshots/invalidIOContext
=== RUN   TestGroupSnapshots/invalidCallback
--- PASS: TestGroupSnapshots (18.92s)
    --- PASS: TestGroupSnapshots/groupSnapCreateRemove (2.01s)
    --- PASS: TestGroupSnapshots/groupSnapRename (1.82s)
    --- PASS: TestGroupSnapshots/groupSnappList (6.10s)
    --- PASS: TestGroupSnapshots/groupSnapRollback (2.04s)
    --- PASS: TestGroupSnapshots/groupSnapRollbackWithProgress (1.87s)
    --- PASS: TestGroupSnapshots/invalidIOContext (0.00s)
    --- PASS: TestGroupSnapshots/invalidCallback (0.00s)
=== RUN   TestGroupCreateRemove
--- PASS: TestGroupCreateRemove (3.03s)
=== RUN   TestGroupRename
--- PASS: TestGroupRename (3.04s)
=== RUN   TestGroupList
--- PASS: TestGroupList (3.05s)
=== RUN   TestGroupImageAdd
--- PASS: TestGroupImageAdd (5.12s)
=== RUN   TestGroupImageRemove
--- PASS: TestGroupImageRemove (5.06s)
=== RUN   TestGroupImageRemoveByID
--- PASS: TestGroupImageRemoveByID (5.06s)
=== RUN   TestGroupImageList
--- PASS: TestGroupImageList (5.09s)
=== RUN   TestGroupImageGetGroup
=== RUN   TestGroupImageGetGroup/invalidImage
--- PASS: TestGroupImageGetGroup (5.06s)
    --- PASS: TestGroupImageGetGroup/invalidImage (0.00s)
=== RUN   TestImageMetadata
--- PASS: TestImageMetadata (5.06s)
=== RUN   TestGetMirrorMode
=== RUN   TestGetMirrorMode/mirrorModeDisabled
=== RUN   TestGetMirrorMode/mirrorModeEnabled
=== RUN   TestGetMirrorMode/ioctxNil
--- PASS: TestGetMirrorMode (3.07s)
    --- PASS: TestGetMirrorMode/mirrorModeDisabled (1.03s)
    --- PASS: TestGetMirrorMode/mirrorModeEnabled (0.01s)
    --- PASS: TestGetMirrorMode/ioctxNil (0.00s)
=== RUN   TestMirroring
=== RUN   TestMirroring/enableDisable
=== RUN   TestMirroring/enableDisableInvalid
=== RUN   TestMirroring/promoteDemote
=== RUN   TestMirroring/promoteDemoteInvalid
=== RUN   TestMirroring/resync
=== RUN   TestMirroring/resyncInvalid
=== RUN   TestMirroring/instanceId
=== RUN   TestMirroring/instanceIdInvalid
--- PASS: TestMirroring (16.46s)
    --- PASS: TestMirroring/enableDisable (2.04s)
    --- PASS: TestMirroring/enableDisableInvalid (0.02s)
    --- PASS: TestMirroring/promoteDemote (3.38s)
    --- PASS: TestMirroring/promoteDemoteInvalid (0.02s)
    --- PASS: TestMirroring/resync (4.05s)
    --- PASS: TestMirroring/resyncInvalid (0.02s)
    --- PASS: TestMirroring/instanceId (2.01s)
    --- PASS: TestMirroring/instanceIdInvalid (0.02s)
=== RUN   TestGetMirrorImageInfo
=== RUN   TestGetMirrorImageInfo/closedImage
=== RUN   TestGetMirrorImageInfo/getInfo
--- PASS: TestGetMirrorImageInfo (6.07s)
    --- PASS: TestGetMirrorImageInfo/closedImage (0.00s)
    --- PASS: TestGetMirrorImageInfo/getInfo (1.04s)
=== RUN   TestMirrorConstantStrings
--- PASS: TestMirrorConstantStrings (0.00s)
=== RUN   TestGetGlobalMirrorStatus
=== RUN   TestGetGlobalMirrorStatus/closedImage
=== RUN   TestGetGlobalMirrorStatus/getStatus
--- PASS: TestGetGlobalMirrorStatus (6.14s)
    --- PASS: TestGetGlobalMirrorStatus/closedImage (0.00s)
    --- PASS: TestGetGlobalMirrorStatus/getStatus (1.07s)
=== RUN   TestGetGlobalMirrorStatusMirroredPool
    mirror_test.go:337: no mirror config env var set
--- SKIP: TestGetGlobalMirrorStatusMirroredPool (0.00s)
=== RUN   TestMirrorImageStatusSummary
=== RUN   TestMirrorImageStatusSummary/ioctxNil
=== RUN   TestMirrorImageStatusSummary/emptyPool
=== RUN   TestMirrorImageStatusSummary/mirroredPool
    mirror_test.go:499: no mirror config env var set
--- PASS: TestMirrorImageStatusSummary (3.05s)
    --- PASS: TestMirrorImageStatusSummary/ioctxNil (0.00s)
    --- PASS: TestMirrorImageStatusSummary/emptyPool (3.05s)
    --- SKIP: TestMirrorImageStatusSummary/mirroredPool (0.00s)
=== RUN   TestNamespace
=== RUN   TestNamespace/invalidInputNamespace
=== RUN   TestNamespace/CreateNamespace
=== RUN   TestNamespace/NonExistingNamespace
=== RUN   TestNamespace/NamespaceList
--- PASS: TestNamespace (3.03s)
    --- PASS: TestNamespace/invalidInputNamespace (0.00s)
    --- PASS: TestNamespace/CreateNamespace (1.03s)
    --- PASS: TestNamespace/NonExistingNamespace (0.02s)
    --- PASS: TestNamespace/NamespaceList (0.05s)
=== RUN   TestRbdOptions
--- PASS: TestRbdOptions (0.00s)
=== RUN   TestRbdOptionsClear
--- PASS: TestRbdOptionsClear (0.00s)
=== RUN   TestInvalidRbdOption
--- PASS: TestInvalidRbdOption (0.00s)
=== RUN   TestPoolMetadata
=== RUN   TestPoolMetadata/GetWrongKey
=== RUN   TestPoolMetadata/NullKey
=== RUN   TestPoolMetadata/NullIOContext
=== RUN   TestPoolMetadata/SetGetValues
=== RUN   TestPoolMetadata/largeSetValue
=== RUN   TestPoolMetadata/removeNonExistingKey
=== RUN   TestPoolMetadata/removeExistingKey
--- PASS: TestPoolMetadata (3.04s)
    --- PASS: TestPoolMetadata/GetWrongKey (1.03s)
    --- PASS: TestPoolMetadata/NullKey (0.01s)
    --- PASS: TestPoolMetadata/NullIOContext (0.00s)
    --- PASS: TestPoolMetadata/SetGetValues (0.00s)
    --- PASS: TestPoolMetadata/largeSetValue (0.01s)
    --- PASS: TestPoolMetadata/removeNonExistingKey (0.00s)
    --- PASS: TestPoolMetadata/removeExistingKey (0.01s)
=== RUN   TestPoolInit
=== RUN   TestPoolInit/NullIOContext
=== RUN   TestPoolInit/PoolInitWithForce
=== RUN   TestPoolInit/PoolInitWithoutForce
--- PASS: TestPoolInit (6.09s)
    --- PASS: TestPoolInit/NullIOContext (0.00s)
    --- PASS: TestPoolInit/PoolInitWithForce (3.05s)
    --- PASS: TestPoolInit/PoolInitWithoutForce (1.03s)
=== RUN   TestGetAllPoolStat
=== RUN   TestGetAllPoolStat/NullIOContext
=== RUN   TestGetAllPoolStat/CheckPoolStatOption
--- PASS: TestGetAllPoolStat (7.09s)
    --- PASS: TestGetAllPoolStat/NullIOContext (0.00s)
    --- PASS: TestGetAllPoolStat/CheckPoolStatOption (1.08s)
=== RUN   TestImagePropertiesNautilus
--- PASS: TestImagePropertiesNautilus (5.06s)
=== RUN   TestClosedImageNautilus
--- PASS: TestClosedImageNautilus (5.11s)
=== RUN   TestSparsify
=== RUN   TestSparsify/valid
=== RUN   TestSparsify/invalidValue
=== RUN   TestSparsify/closedImage
--- PASS: TestSparsify (5.05s)
    --- PASS: TestSparsify/valid (0.03s)
    --- PASS: TestSparsify/invalidValue (0.02s)
    --- PASS: TestSparsify/closedImage (0.02s)
=== RUN   TestGetParent
=== RUN   TestGetParent/ParentNotAvailable
=== RUN   TestGetParent/ParentAvailable
=== RUN   TestGetParent/ClosedImage
--- PASS: TestGetParent (7.11s)
    --- PASS: TestGetParent/ParentNotAvailable (0.01s)
    --- PASS: TestGetParent/ParentAvailable (0.15s)
    --- PASS: TestGetParent/ClosedImage (0.08s)
=== RUN   TestSetSnapByID
=== RUN   TestSetSnapByID/happyPath
=== RUN   TestSetSnapByID/ClosedImage
=== RUN   TestSetSnapByID/invalidSnapID
--- PASS: TestSetSnapByID (7.11s)
    --- PASS: TestSetSnapByID/happyPath (5.14s)
    --- PASS: TestSetSnapByID/ClosedImage (0.08s)
    --- PASS: TestSetSnapByID/invalidSnapID (0.09s)
=== RUN   TestVersion
--- PASS: TestVersion (0.00s)
=== RUN   TestImageCreate
--- PASS: TestImageCreate (5.06s)
=== RUN   TestImageCreate2
--- PASS: TestImageCreate2 (5.10s)
=== RUN   TestImageCreate3
--- PASS: TestImageCreate3 (5.08s)
=== RUN   TestCreateImageWithOptions
--- PASS: TestCreateImageWithOptions (10.14s)
=== RUN   TestGetImageNames
--- PASS: TestGetImageNames (6.10s)
=== RUN   TestDeprecatedImageOpen
--- PASS: TestDeprecatedImageOpen (5.08s)
=== RUN   TestImageResize
--- PASS: TestImageResize (5.08s)
=== RUN   TestImageProperties
--- PASS: TestImageProperties (5.11s)
=== RUN   TestImageRename
--- PASS: TestImageRename (5.04s)
=== RUN   TestImageSeek
--- PASS: TestImageSeek (5.10s)
=== RUN   TestImageDiscard
--- PASS: TestImageDiscard (5.07s)
=== RUN   TestWriteSame
=== RUN   TestWriteSame/writeAndRead
=== RUN   TestWriteSame/writePartialData
=== RUN   TestWriteSame/writeNoData
=== RUN   TestWriteSame/zerofill
=== RUN   TestWriteSame/writeSameReadOnly
--- PASS: TestWriteSame (5.05s)
    --- PASS: TestWriteSame/writeAndRead (0.01s)
    --- PASS: TestWriteSame/writePartialData (0.00s)
    --- PASS: TestWriteSame/writeNoData (0.00s)
    --- PASS: TestWriteSame/zerofill (0.09s)
    --- PASS: TestWriteSame/writeSameReadOnly (0.01s)
=== RUN   TestIOReaderWriter
--- PASS: TestIOReaderWriter (5.09s)
=== RUN   TestReadAt
--- PASS: TestReadAt (5.07s)
=== RUN   TestImageCopy
=== RUN   TestImageCopy/invalidParameters
=== RUN   TestImageCopy/successfulCopy
=== RUN   TestImageCopy/copy2ImageNotOpen
=== RUN   TestImageCopy/successfulCopy2
--- PASS: TestImageCopy (5.23s)
    --- PASS: TestImageCopy/invalidParameters (3.15s)
    --- PASS: TestImageCopy/successfulCopy (0.14s)
    --- PASS: TestImageCopy/copy2ImageNotOpen (0.11s)
    --- PASS: TestImageCopy/successfulCopy2 (0.23s)
=== RUN   TestParentInfo
--- PASS: TestParentInfo (7.13s)
=== RUN   TestNoIOContext
--- PASS: TestNoIOContext (0.00s)
=== RUN   TestErrorNoName
--- PASS: TestErrorNoName (0.00s)
=== RUN   TestErrorImageNotOpen
--- PASS: TestErrorImageNotOpen (0.00s)
=== RUN   TestNotFound
--- PASS: TestNotFound (3.03s)
=== RUN   TestTrashImage
--- PASS: TestTrashImage (5.11s)
=== RUN   TestClosedImage
    rbd_test.go:1214: many of the following functions cause a panic or hang, skip this test
--- SKIP: TestClosedImage (0.00s)
=== RUN   TestOpenImage
--- PASS: TestOpenImage (5.09s)
=== RUN   TestRemoveImage
--- PASS: TestRemoveImage (5.09s)
=== RUN   TestCloneImage
=== RUN   TestCloneImage/cloneImage
=== RUN   TestCloneImage/cloneFromImage
=== RUN   TestCloneImage/cloneFromImageInvalidCtx
=== RUN   TestCloneImage/cloneImageNilOpts
--- PASS: TestCloneImage (7.07s)
    --- PASS: TestCloneImage/cloneImage (0.12s)
    --- PASS: TestCloneImage/cloneFromImage (0.13s)
    --- PASS: TestCloneImage/cloneFromImageInvalidCtx (0.00s)
    --- PASS: TestCloneImage/cloneImageNilOpts (0.00s)
=== RUN   TestGetId
--- PASS: TestGetId (5.08s)
=== RUN   TestOpenImageById
=== RUN   TestOpenImageById/InvalidArguments
=== RUN   TestOpenImageById/ReadWriteBadId
=== RUN   TestOpenImageById/ReadOnlyBadId
=== RUN   TestOpenImageById/ReadWrite
=== RUN   TestOpenImageById/ReadOnly
=== RUN   TestOpenImageById/Snapshot
=== RUN   TestOpenImageById/ReadOnlySnapshot
--- PASS: TestOpenImageById (8.56s)
    --- PASS: TestOpenImageById/InvalidArguments (0.00s)
    --- PASS: TestOpenImageById/ReadWriteBadId (0.00s)
    --- PASS: TestOpenImageById/ReadOnlyBadId (0.01s)
    --- PASS: TestOpenImageById/ReadWrite (0.03s)
    --- PASS: TestOpenImageById/ReadOnly (0.01s)
    --- PASS: TestOpenImageById/Snapshot (1.97s)
    --- PASS: TestOpenImageById/ReadOnlySnapshot (1.46s)
=== RUN   TestRadosIoctxInvalid
--- PASS: TestRadosIoctxInvalid (0.00s)
=== RUN   TestGetSnapNamespaceType
=== RUN   TestGetSnapNamespaceType/SnapNamespaceTypeInvalidArgs
=== RUN   TestGetSnapNamespaceType/SnapNamespaceTypeUser
=== RUN   TestGetSnapNamespaceType/SnapNamespaceTypeTrash
--- PASS: TestGetSnapNamespaceType (7.09s)
    --- PASS: TestGetSnapNamespaceType/SnapNamespaceTypeInvalidArgs (0.11s)
    --- PASS: TestGetSnapNamespaceType/SnapNamespaceTypeUser (0.00s)
    --- PASS: TestGetSnapNamespaceType/SnapNamespaceTypeTrash (0.91s)
=== RUN   TestGetSnapTrashNamespace
=== RUN   TestGetSnapTrashNamespace/InvalidSnapID
=== RUN   TestGetSnapTrashNamespace/InvalidImage
--- PASS: TestGetSnapTrashNamespace (7.11s)
    --- PASS: TestGetSnapTrashNamespace/InvalidSnapID (0.00s)
    --- PASS: TestGetSnapTrashNamespace/InvalidImage (0.00s)
=== RUN   TestSnapIDFunctions
=== RUN   TestSnapIDFunctions/happyPath
=== RUN   TestSnapIDFunctions/closedImage
=== RUN   TestSnapIDFunctions/invalidOptions
--- PASS: TestSnapIDFunctions (9.14s)
    --- PASS: TestSnapIDFunctions/happyPath (5.15s)
    --- PASS: TestSnapIDFunctions/closedImage (2.03s)
    --- PASS: TestSnapIDFunctions/invalidOptions (0.11s)
=== RUN   TestCreateSnapshot
--- PASS: TestCreateSnapshot (7.13s)
=== RUN   TestErrorSnapshotNoName
--- PASS: TestErrorSnapshotNoName (6.11s)
=== RUN   TestGetSnapTimestamp
=== RUN   TestGetSnapTimestamp/ClosedImage
=== RUN   TestGetSnapTimestamp/invalidSnapID
    snapshot_test.go:138: hits assert due to https://tracker.ceph.com/issues/47287
=== RUN   TestGetSnapTimestamp/happyPath
--- PASS: TestGetSnapTimestamp (7.15s)
    --- PASS: TestGetSnapTimestamp/ClosedImage (3.17s)
    --- SKIP: TestGetSnapTimestamp/invalidSnapID (0.00s)
    --- PASS: TestGetSnapTimestamp/happyPath (2.03s)
=== RUN   TestListWatchers
=== RUN   TestListWatchers/imageNotOpen
=== RUN   TestListWatchers/noWatchers
=== RUN   TestListWatchers/addWatchers
--- PASS: TestListWatchers (5.08s)
    --- PASS: TestListWatchers/imageNotOpen (0.02s)
    --- PASS: TestListWatchers/noWatchers (0.02s)
    --- PASS: TestListWatchers/addWatchers (0.06s)
=== RUN   TestWatch
=== RUN   TestWatch/imageNotOpen
=== RUN   TestWatch/simpleWatch
=== RUN   TestWatch/badWatch
--- PASS: TestWatch (5.25s)
    --- PASS: TestWatch/imageNotOpen (0.02s)
    --- PASS: TestWatch/simpleWatch (0.20s)
    --- PASS: TestWatch/badWatch (0.02s)
=== RUN   TestWatchMultiChannels
--- PASS: TestWatchMultiChannels (5.11s)
PASS
coverage: 89.2% of statements in github.com/ceph/go-ceph/rbd
ok      github.com/ceph/go-ceph/rbd     348.486s        coverage: 89.2% of statements in github.com/ceph/go-ceph/rbd
*** running: go vet -tags octopus ./rgwadmin
*** running: go test -v -count=1 -tags octopus -covermode=count -coverprofile=rgwadmin.cover.out -coverpkg=github.com/ceph/go-ceph/rgwadmin ./rgwadmin
=== RUN   TestHandleStatusError
--- PASS: TestHandleStatusError (0.00s)
=== RUN   TestRadosGWTestSuite
=== RUN   TestRadosGWTestSuite/TestBucket
=== RUN   TestRadosGWTestSuite/TestBucket/list_buckets
2021/05/05 15:15:25
GET /admin/bucket? HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=d9fae6e851ac2c24751c7a45d668b029ef5a1282de1ada67529e612df1a2273c
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 200 OK
Content-Length: 2
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000001-006092b68d-102c-default

[]
=== RUN   TestRadosGWTestSuite/TestBucket/info_non-existing_bucket
2021/05/05 15:15:25
GET /admin/bucket?bucket=foo&policy=false HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=519eac261cf2328eb9a4617910930246787dc92c65cbcf58ee5dd65553ca5596
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 404 Not Found
Content-Length: 114
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Type: application/json
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000002-006092b68d-102c-default

{"Code":"NoSuchKey","RequestId":"tx000000000000000000002-006092b68d-102c-default","HostId":"102c-default-default"}
=== RUN   TestRadosGWTestSuite/TestBucket/remove_non-existing_bucket
2021/05/05 15:15:25
DELETE /admin/bucket?bucket=foo&policy=false HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=e2b3135da93c5f7992b64eb3efba9e1f2b0ef4dbd47ecabf5f49756cd2df140a
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 404 Not Found
Content-Length: 114
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Type: application/json
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000003-006092b68d-102c-default

{"Code":"NoSuchKey","RequestId":"tx000000000000000000003-006092b68d-102c-default","HostId":"102c-default-default"}
=== RUN   TestRadosGWTestSuite/TestUsage
=== RUN   TestRadosGWTestSuite/TestUsage/get_usage
2021/05/05 15:15:25
GET /admin/usage?remove-all=false&show-entries=false&show-summary=true HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=ef25b20657890468aae11807c63f0dc08692908d3208dbedc26cfc236bc96aa2
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 200 OK
Content-Length: 14
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000004-006092b68d-102c-default

{"summary":[]}
=== RUN   TestRadosGWTestSuite/TestUsage/trim_usage
2021/05/05 15:15:25
GET /admin/usage?remove-all=false&show-entries=false&show-summary=false HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=dfdfb90c9665d3a5e25c1985c979c0806d10323a1eb3e3b4507ba4a52e42c1a0
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 200 OK
Content-Length: 2
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000005-006092b68d-102c-default

{}
=== RUN   TestRadosGWTestSuite/TestUser
=== RUN   TestRadosGWTestSuite/TestUser/fail_to_create_user_since_no_UID_provided
=== RUN   TestRadosGWTestSuite/TestUser/fail_to_create_user_since_no_no_display_name_provided
=== RUN   TestRadosGWTestSuite/TestUser/user_creation_success
2021/05/05 15:15:25
PUT /admin/user?display-name=This%20is%20leseb&email=leseb%40leseb.io&generate-key=false&max-buckets=0&purge-data=0&suspended=0&uid=leseb HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Content-Length: 0
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=b4ac6d98da12da49e02298b0a3c5130777c4b7b0d3b24c96e370820661da96bc
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 200 OK
Content-Length: 547
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000006-006092b68d-102c-default

{"tenant":"","user_id":"leseb","display_name":"This is leseb","email":"leseb@leseb.io","suspended":0,"max_buckets":0,"subusers":[],"keys":[],"swift_keys":[],"caps":[],"op_mask":"read, write, delete","system":"false","admin":"false","default_placement":"","default_storage_class":"","placement_tags":[],"bucket_quota":{"enabled":false,"check_on_raw":false,"max_size":-1,"max_size_kb":0,"max_objects":-1},"user_quota":{"enabled":false,"check_on_raw":false,"max_size":-1,"max_size_kb":0,"max_objects":-1},"temp_url_keys":[],"type":"rgw","mfa_ids":[]}
=== RUN   TestRadosGWTestSuite/TestUser/get_user_leseb
2021/05/05 15:15:25
GET /admin/user?generate-key=false&max-buckets=0&purge-data=0&suspended=0&uid=leseb HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=b249186f43aa0553e2e28da92258b96f650685c124d2934d6c96bba158f01258
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 200 OK
Content-Length: 547
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000007-006092b68d-102c-default

{"tenant":"","user_id":"leseb","display_name":"This is leseb","email":"leseb@leseb.io","suspended":0,"max_buckets":0,"subusers":[],"keys":[],"swift_keys":[],"caps":[],"op_mask":"read, write, delete","system":"false","admin":"false","default_placement":"","default_storage_class":"","placement_tags":[],"bucket_quota":{"enabled":false,"check_on_raw":false,"max_size":-1,"max_size_kb":0,"max_objects":-1},"user_quota":{"enabled":false,"check_on_raw":false,"max_size":-1,"max_size_kb":0,"max_objects":-1},"temp_url_keys":[],"type":"rgw","mfa_ids":[]}
=== RUN   TestRadosGWTestSuite/TestUser/modify_user_email
2021/05/05 15:15:25
POST /admin/user?email=leseb%40leseb.com&generate-key=false&max-buckets=0&purge-data=0&suspended=0&uid=leseb HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Content-Length: 0
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=1b711a488327c775b366d843b34019d30de3ace6c7fd367da262ee2d4cbdcb58
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 200 OK
Content-Length: 548
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000008-006092b68d-102c-default

{"tenant":"","user_id":"leseb","display_name":"This is leseb","email":"leseb@leseb.com","suspended":0,"max_buckets":0,"subusers":[],"keys":[],"swift_keys":[],"caps":[],"op_mask":"read, write, delete","system":"false","admin":"false","default_placement":"","default_storage_class":"","placement_tags":[],"bucket_quota":{"enabled":false,"check_on_raw":false,"max_size":-1,"max_size_kb":0,"max_objects":-1},"user_quota":{"enabled":false,"check_on_raw":false,"max_size":-1,"max_size_kb":0,"max_objects":-1},"temp_url_keys":[],"type":"rgw","mfa_ids":[]}
=== RUN   TestRadosGWTestSuite/TestUser/user_already_exists
2021/05/05 15:15:25
PUT /admin/user?display-name=Admin%20user&generate-key=false&max-buckets=0&purge-data=0&suspended=0&uid=admin HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Content-Length: 0
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=f5f711543f9da753807984aff056af5c69849e9b31b3b663261f31a6e10a4762
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:25
HTTP/1.1 409 Conflict
Content-Length: 122
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Type: application/json
Date: Wed, 05 May 2021 15:15:25 GMT
X-Amz-Request-Id: tx000000000000000000009-006092b68d-102c-default

{"Code":"UserAlreadyExists","RequestId":"tx000000000000000000009-006092b68d-102c-default","HostId":"102c-default-default"}
=== RUN   TestRadosGWTestSuite/TestUser/get_users
2021/05/05 15:15:25
GET /admin/metadata/user? HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=8dac73aa231133d61ca38ed565666e87a836f29c4920bca1c0b099cbc0a6dd92
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151525Z
Accept-Encoding: gzip

2021/05/05 15:15:26
HTTP/1.1 200 OK
Content-Length: 17
Connection: Keep-Alive
Content-Type: application/json
Date: Wed, 05 May 2021 15:15:26 GMT
X-Amz-Request-Id: tx00000000000000000000a-006092b68d-102c-default

["admin","leseb"]
=== RUN   TestRadosGWTestSuite/TestUser/remove_user
2021/05/05 15:15:26
DELETE /admin/user?generate-key=false&max-buckets=0&purge-data=0&suspended=0&uid=leseb HTTP/1.1
Host: 127.0.0.1
User-Agent: Go-http-client/1.1
Authorization: AWS4-HMAC-SHA256 Credential=2262XNX11FZRR44XWIRD/20210505/default/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=ba5a094d40c7187afd3ab57d72d653dfc14a0645f199c70218bcb3cbbfc8ec9c
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20210505T151526Z
Accept-Encoding: gzip

2021/05/05 15:15:26
HTTP/1.1 200 OK
Connection: Keep-Alive
Date: Wed, 05 May 2021 15:15:26 GMT
X-Amz-Request-Id: tx00000000000000000000b-006092b68e-102c-default
Content-Length: 0

--- PASS: TestRadosGWTestSuite (0.25s)
    --- PASS: TestRadosGWTestSuite/TestBucket (0.02s)
        --- PASS: TestRadosGWTestSuite/TestBucket/list_buckets (0.01s)
        --- PASS: TestRadosGWTestSuite/TestBucket/info_non-existing_bucket (0.00s)
        --- PASS: TestRadosGWTestSuite/TestBucket/remove_non-existing_bucket (0.00s)
    --- PASS: TestRadosGWTestSuite/TestUsage (0.10s)
        --- PASS: TestRadosGWTestSuite/TestUsage/get_usage (0.07s)
        --- PASS: TestRadosGWTestSuite/TestUsage/trim_usage (0.03s)
    --- PASS: TestRadosGWTestSuite/TestUser (0.14s)
        --- PASS: TestRadosGWTestSuite/TestUser/fail_to_create_user_since_no_UID_provided (0.00s)
        --- PASS: TestRadosGWTestSuite/TestUser/fail_to_create_user_since_no_no_display_name_provided (0.00s)
        --- PASS: TestRadosGWTestSuite/TestUser/user_creation_success (0.01s)
        --- PASS: TestRadosGWTestSuite/TestUser/get_user_leseb (0.04s)
        --- PASS: TestRadosGWTestSuite/TestUser/modify_user_email (0.02s)
        --- PASS: TestRadosGWTestSuite/TestUser/user_already_exists (0.00s)
        --- PASS: TestRadosGWTestSuite/TestUser/get_users (0.05s)
        --- PASS: TestRadosGWTestSuite/TestUser/remove_user (0.01s)
=== RUN   TestNew
=== RUN   TestNew/no_endpoint
=== RUN   TestNew/no_accessKey
=== RUN   TestNew/no_secretKey
--- PASS: TestNew (0.00s)
    --- PASS: TestNew/no_endpoint (0.00s)
    --- PASS: TestNew/no_accessKey (0.00s)
    --- PASS: TestNew/no_secretKey (0.00s)
=== RUN   TestUnmarshal
--- PASS: TestUnmarshal (0.00s)
=== RUN   TestBuildQueryPath
--- PASS: TestBuildQueryPath (0.00s)
=== RUN   Test_getValues
=== RUN   Test_getValues/default
--- PASS: Test_getValues (0.00s)
    --- PASS: Test_getValues/default (0.00s)
PASS
coverage: 59.5% of statements in github.com/ceph/go-ceph/rgwadmin
ok      github.com/ceph/go-ceph/rgwadmin        0.267s  coverage: 59.5% of statements in github.com/ceph/go-ceph/rgwadmin
*** running: go tool cover -html=cover.out -o /results/coverage/go-ceph.html

@thotz, is this an API that you could use for your COSI work?

Currently, COSI-driver only uses APIs for User creation and deletion which available in this library from my first glance. Still need to review the PR  entirely.

Looks like the CI is broken with:
No match for argument: libcephfs-devel-16.2.1-0.el8
No match for argument: librados-devel-16.2.1-0.el8
No match for argument: librbd-devel-16.2.1-0.el8
Error: Unable to find a match: libcephfs-devel-16.2.1-0.el8 librados-devel-16.2.1-0.el8 librbd-devel-16.2.1-0.el8
The command '/bin/sh -c true &&     yum clean all &&     cv="$(rpm -q --queryformat '%{version}-%{release}' ceph-common)" &&     yum install -y         git wget curl make         /usr/bin/cc /usr/bin/c++         "libcephfs-devel-${cv}" "librados-devel-${cv}" "librbd-devel-${cv}" &&     true' returned a non-zero code: 1
make: *** [Makefile:73: .build.pacific] Error 1

That does not seem related to my patch.

@ansiwen thanks for the review, I believe I've addressed/replied to all of your concerns. It's ready for another round of review. Thanks.
@phlogistonjohn final review from you? :)

@Mergifyio rebase

authors: ansiwen leseb nixpanic thotz

repo: ceph/go-ceph


text:
setup static CI tools

add golang static checks in github actions

Sure @Madhu-1  , we will add it shortly :+1:

source: gharchive/issue

repo: ceph/persistent-volume-migrator

license_type: permissive

license_source: github-api


text:
Add hang-on-error config option

Signed-off-by: David Zafman dzafman@redhat.com

I ran teuthology with a yaml that had a test that would fail and saw this output and no prompt.
2015-02-11 15:51:59,609.609 WARNING:teuthology.contextutil:Saw failure, hanging...

Tests failed for this pull request.
Refer to this link for build results: http://jenkins.ceph.com/job/teuthology-pull-requests/836/

Tests passed for this pull request.
Refer to this link for build results: http://jenkins.ceph.com/job/teuthology-pull-requests/837/

I'm confused how this is any different than interactive-on-error.  It seems to do the same thing just without the prompt.
Even if we couldn't get to the prompt from a scheduled job wouldn't adding interactive-on-error to a scheduled jobs yaml do the same thing?  I suspect it might suspend the job until we teuthology-kill it.

I assumed that interactive-on-error wouldn't work for a scheduled job, but I have not tried it.

I assumed that interactive-on-error wouldn't work for a scheduled job, but I have not tried it.

iirc it hangs?  or it fails out anyway because there's no stdin.. i forget

I understand wanting to be able to inspect a running cluster that's failed testing, but this seems dangerous to me; we have test throughput issues as it is. I wonder if there's a less obtrusive way to help you get the information you need.

Yeah, I'm not really familiar with the library that powers interactive-on-error so it might very well fail because of no stdin.
I agree with @zmc though, a while True seems dangerous. teuthology.contextutil.safe_while would be a better option if we can't figure out how to get at the info you need in another way.

The hang-on-error option wasn't intended to be used by a suite in ceph-qa-suite.  I created it to be able get at the machines for a hard to reproduce problem.  I was going to schedule multiple copies of a run and have it hang when a failure occurs.  What does teuthology.contextutil.safe_while do?

@dzafman it'll let you specify an exit condition for your while loop.
http://ceph.com/teuthology/docs/teuthology.html#teuthology.contextutil.safe_while

I don't have a while loop.  I'm taking a yaml from a failed suite run generated by a test suite.  Modifying it to run as a stand alone run and adding hang-on-error: true.  Then doing a teuthology-schedule with -N 100.

@dzafman you do have a while loop; it's where I commented a couple hours ago.
100 jobs using this feature as implemented will bring down the entire lab, potentially for days. I really don't think I can support this.

@zmc This isn't important right now, but I still don't have enough understanding to do what I had wanted to do.  Also, it sounds like I would have to modify the run_tasks machinery to keep re-running the job, until a failure is seen.  This way only a single job needs to be scheduled and only a single job could potentially tie up machines.

@dzafman if you just want to run a job many times and pause on failure, you can easily do that with a yaml from a job by adding interactive-on-error: true and passing it to https://github.com/ceph/teuthology/blob/master/hammer.sh

source: gharchive/pull-request

authors: andrewschoen ceph-jenkins dzafman jdurgin liewegas zmc

repo: ceph/teuthology

license: MIT


text:
Fix an obvious bug in sentinel()

Signed-off-by: Zack Cerza zack@redhat.com

man, your reviewer sucks.
The auto-check won't really help here, so going ahead

authors: dmick zmc


text:
Update Jest snapshots

Summary

This PR updates snapshots for terra-clinical-onset-picker caused by a dependency update, so that snapshots are up to date and don't cause failures.
Testing

This change was tested using:

[ ] WDIO
[x] Jest
[ ] Visual testing (please attach a screenshot or recording)
[ ] Other (please describe below)
[ ] No tests are needed

Reviews
In addition to engineering reviews, this PR needs:

[ ] UX review
[ ] Accessibility review
[ ] Functional review

Additional Details

Thank you for contributing to Terra.
@cerner/terra

is the role changing from combobox to button valid ..?? I am not able to find relevant changes on form-select and form-field component. Can you please share the relevant PR which has updated aria-attributes and role

@supreethmr after searching, it seems like the combobox change was done in terra-form-select in https://github.com/cerner/terra-core/pull/3707. The snapshot changes in terra-clinical-onset-picker was triggered by the v6.40.0 release of terra-form-select.
Are the snapshot changes an intended side-effect? If not, then I propose we lock the terra-form-select dependency to 6.39.0 to fix the build failures for now and log a defect to fix this. Right now, the jest snapshot failures are blocking other PRs from merging.

repo: cerner/terra-clinical

license_source: bigquery


text:
Break up large example pages into subpages

Issue Description
Some of the Terra example pages (like forms) are getting too large to be usable. Recommend breaking the separate examples into subpages.
Issue Type

[ ] New Feature
[x] Enhancement
[ ] Bug
[ ] Other

Expected Behavior
For components with many examples, each example has its own subpage.
Current Behavior
Consumers have to scroll through explanatory text, code, and examples on a single page.

The components that should be broken out:

[ ] Form
[ ] Icons - static vs themeable
[ ] List - list item, list, single select list, multi select list
[ ] Overlay - overlay container, overlay, loading overlay
[ ] Table - Table,  Header vs Subheaders, Header Cell vs Cell, Rows vs Row, Selectable Table

In addition to the above, I'd also like to break up these core component examples:

Alert - basic, basic with actions/dismissible, and custom/build your own.
Popup - default and arrow, attachments, size variants, and special popups: bounded, class styles, modal
Slide Panel - overlay, squish, start, end, sizes, and fill

We'll address the remaining pages in individual issues.

authors: bjankord emilyrohrbough mmalaker

repo: cerner/terra-core


text:
[terra-framework] Removed inline style for dev-site components Part 2

Summary
Removed all inline styles from Dev-site components and replaced the same styles with external css for the following packages:

Brand Footer
Dialog Modal
Embedded Content Consumer
Menu
Modal Manager
Navigation Prompt

Partially resolves #657

Would it be possible to break each change into its own PR so it's easier to review?

Yes, it is possible. But terra-framework has 32 Packages and had 452 inline style warnings.
Creating a separate PR for each component would result in 32 PR's which would make it difficult to keep track. So, it was decided to break down the 32 packages into sets based on the number of changes required for them.
#700, contains changes for only one package, i.e. "Popup", due to the large number of changes required.
@emilyrohrbough, Please share your thoughts on this.

Let's get the comments @emilyrohrbough left on the review addressed and then this should be ready to merge. As @emilyrohrbough pointed out, we want to avoid using the @extends syntax adds an extra complexity to these examples.

All review comments have been addressed and avoided the use of @extends

repo: cerner/terra-framework