]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/librgw_file_cd.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / test / librgw_file_cd.cc
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3/*
4 * Ceph - scalable distributed file system
5 *
6 * Copyright (C) 2015 Red Hat, Inc.
7 *
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
12 *
13 */
14
15#include <stdint.h>
16#include <tuple>
17#include <iostream>
18
19#include "include/rados/librgw.h"
20#include "include/rados/rgw_file.h"
21
22#include "gtest/gtest.h"
23#include "common/ceph_argparse.h"
24#include "common/debug.h"
7c673cae
FG
25
26#define dout_subsys ceph_subsys_rgw
27
28namespace {
29 librgw_t rgw = nullptr;
30 string userid("testuser");
31 string access_key("");
32 string secret_key("");
33 struct rgw_fs *fs = nullptr;
34
35 uint32_t owner_uid = 867;
36 uint32_t owner_gid = 5309;
37 uint32_t create_mask = RGW_SETATTR_UID | RGW_SETATTR_GID | RGW_SETATTR_MODE;
38
39 bool do_create = false;
40 bool do_delete = false;
41 bool do_multi = false;
42 int multi_cnt = 10;
43
f67539c2 44 string bucket_name = "sorrydave";
7c673cae
FG
45
46 struct {
47 int argc;
48 char **argv;
49 } saved_args;
50}
51
52TEST(LibRGW, INIT) {
53 int ret = librgw_create(&rgw, saved_args.argc, saved_args.argv);
54 ASSERT_EQ(ret, 0);
55 ASSERT_NE(rgw, nullptr);
56}
57
58TEST(LibRGW, MOUNT) {
3efd9988
FG
59 int ret = rgw_mount2(rgw, userid.c_str(), access_key.c_str(),
60 secret_key.c_str(), "/", &fs, RGW_MOUNT_FLAG_NONE);
7c673cae
FG
61 ASSERT_EQ(ret, 0);
62 ASSERT_NE(fs, nullptr);
63}
64
65TEST(LibRGW, CREATE_BUCKET) {
66 if (do_create) {
67 struct stat st;
68 struct rgw_file_handle *fh;
69
70 st.st_uid = owner_uid;
71 st.st_gid = owner_gid;
72 st.st_mode = 755;
73
74 int ret = rgw_mkdir(fs, fs->root_fh, bucket_name.c_str(), &st, create_mask,
75 &fh, RGW_MKDIR_FLAG_NONE);
76 ASSERT_EQ(ret, 0);
77 }
78}
79
80TEST(LibRGW, DELETE_BUCKET) {
81 if (do_delete) {
82 int ret = rgw_unlink(fs, fs->root_fh, bucket_name.c_str(),
83 RGW_UNLINK_FLAG_NONE);
84 ASSERT_EQ(ret, 0);
85 }
86}
87
88TEST(LibRGW, CREATE_BUCKET_MULTI) {
89 if (do_multi) {
90 int ret;
91 struct stat st;
92 struct rgw_file_handle *fh;
93
94 st.st_uid = owner_uid;
95 st.st_gid = owner_gid;
96 st.st_mode = 755;
97
98 for (int ix = 0; ix < multi_cnt; ++ix) {
99 string bn = bucket_name;
100 bn += to_string(ix);
101 ret = rgw_mkdir(fs, fs->root_fh, bn.c_str(), &st, create_mask, &fh,
102 RGW_MKDIR_FLAG_NONE);
103 ASSERT_EQ(ret, 0);
104 std::cout << "created: " << bn << std::endl;
105 }
106 }
107}
108
109TEST(LibRGW, DELETE_BUCKET_MULTI) {
110 if (do_multi) {
111 for (int ix = 0; ix < multi_cnt; ++ix) {
112 string bn = bucket_name;
113 bn += to_string(ix);
114 int ret = rgw_unlink(fs, fs->root_fh, bn.c_str(),
115 RGW_UNLINK_FLAG_NONE);
116 ASSERT_EQ(ret, 0);
117 }
118 }
119}
120
121TEST(LibRGW, CLEANUP) {
122 // do nothing
123}
124
125TEST(LibRGW, UMOUNT) {
126 if (! fs)
127 return;
128
129 int ret = rgw_umount(fs, RGW_UMOUNT_FLAG_NONE);
130 ASSERT_EQ(ret, 0);
131}
132
133TEST(LibRGW, SHUTDOWN) {
134 librgw_shutdown(rgw);
135}
136
137int main(int argc, char *argv[])
138{
139 char *v{nullptr};
140 string val;
141 vector<const char*> args;
142
143 argv_to_vec(argc, const_cast<const char**>(argv), args);
144 env_to_vec(args);
145
146 v = getenv("AWS_ACCESS_KEY_ID");
147 if (v) {
148 access_key = v;
149 }
150
151 v = getenv("AWS_SECRET_ACCESS_KEY");
152 if (v) {
153 secret_key = v;
154 }
155
156 for (auto arg_iter = args.begin(); arg_iter != args.end();) {
157 if (ceph_argparse_witharg(args, arg_iter, &val, "--access",
158 (char*) nullptr)) {
159 access_key = val;
160 } else if (ceph_argparse_witharg(args, arg_iter, &val, "--secret",
161 (char*) nullptr)) {
162 secret_key = val;
163 } else if (ceph_argparse_witharg(args, arg_iter, &val, "--userid",
164 (char*) nullptr)) {
165 userid = val;
166 } else if (ceph_argparse_witharg(args, arg_iter, &val, "--bn",
167 (char*) nullptr)) {
168 bucket_name = val;
169 } else if (ceph_argparse_witharg(args, arg_iter, &val, "--uid",
170 (char*) nullptr)) {
171 owner_uid = std::stoi(val);
172 } else if (ceph_argparse_witharg(args, arg_iter, &val, "--gid",
173 (char*) nullptr)) {
174 owner_gid = std::stoi(val);
175 } else if (ceph_argparse_flag(args, arg_iter, "--create",
176 (char*) nullptr)) {
177 do_create = true;
178 } else if (ceph_argparse_flag(args, arg_iter, "--delete",
179 (char*) nullptr)) {
180 do_delete = true;
181 } else if (ceph_argparse_flag(args, arg_iter, "--multi",
182 (char*) nullptr)) {
183 do_multi = true;
184 } else {
185 ++arg_iter;
186 }
187 }
188
11fdf7f2 189 /* don't accidentally run as anonymous */
7c673cae
FG
190 if ((access_key == "") ||
191 (secret_key == "")) {
192 std::cout << argv[0] << " no AWS credentials, exiting" << std::endl;
193 return EPERM;
194 }
195
196 saved_args.argc = argc;
197 saved_args.argv = argv;
198
199 ::testing::InitGoogleTest(&argc, argv);
200 return RUN_ALL_TESTS();
201}