Skip to content

Commit

Permalink
common: ceph_ioprio_string_to_class always returns -EINVAL
Browse files Browse the repository at this point in the history
The l string is always empty because std::transform needs a
pre-allocated string. Replace with the in-place version. Add unit tests.

http://tracker.ceph.com/issues/9677 Fixes: #9677

Signed-off-by: Loic Dachary <loic-201408@dachary.org>
(cherry picked from commit 3535b7a)

Conflicts:
	src/test/Makefile.am
  • Loading branch information
Loic Dachary committed Oct 7, 2014
1 parent 5f2eec5 commit 86926c6
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 5 deletions.
4 changes: 2 additions & 2 deletions src/common/io_priority.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ int ceph_ioprio_set(int whence, int who, int ioprio)

int ceph_ioprio_string_to_class(const std::string& s)
{
std::string l;
std::transform(s.begin(), s.end(), l.begin(), ::tolower);
std::string l = s;
std::transform(l.begin(), l.end(), l.begin(), ::tolower);

if (l == "idle")
return IOPRIO_CLASS_IDLE;
Expand Down
10 changes: 7 additions & 3 deletions src/test/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,9 @@ unittest_pglog_SOURCES = test/osd/TestPGLog.cc
unittest_pglog_CXXFLAGS = $(UNITTEST_CXXFLAGS)
unittest_pglog_LDADD = $(LIBOSD) $(UNITTEST_LDADD) $(CEPH_GLOBAL)
check_PROGRAMS += unittest_pglog
if LINUX
unittest_pglog_LDADD += -ldl
endif # LINUX

unittest_ecbackend_SOURCES = test/osd/TestECBackend.cc
unittest_ecbackend_CXXFLAGS = $(UNITTEST_CXXFLAGS)
Expand All @@ -379,9 +382,10 @@ unittest_hitset_CXXFLAGS = $(UNITTEST_CXXFLAGS)
unittest_hitset_LDADD = $(LIBOSD) $(UNITTEST_LDADD) $(CEPH_GLOBAL)
check_PROGRAMS += unittest_hitset

if LINUX
unittest_pglog_LDADD += -ldl
endif # LINUX
unittest_io_priority_SOURCES = test/common/test_io_priority.cc
unittest_io_priority_CXXFLAGS = $(UNITTEST_CXXFLAGS)
unittest_io_priority_LDADD = $(UNITTEST_LDADD) $(CEPH_GLOBAL)
check_PROGRAMS += unittest_io_priority

unittest_gather_SOURCES = test/gather.cc
unittest_gather_LDADD = $(UNITTEST_LDADD) $(CEPH_GLOBAL)
Expand Down
51 changes: 51 additions & 0 deletions src/test/common/test_io_priority.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
*
* Copyright (C) 2014 Red Hat <contact@redhat.com>
*
* Author: Loic Dachary <loic@dachary.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
*/

#include <errno.h>
#include <gtest/gtest.h>

#include "common/io_priority.h"

TEST(io_priority, ceph_ioprio_string_to_class) {
ASSERT_EQ(IOPRIO_CLASS_IDLE, ceph_ioprio_string_to_class("idle"));
ASSERT_EQ(IOPRIO_CLASS_IDLE, ceph_ioprio_string_to_class("IDLE"));

ASSERT_EQ(IOPRIO_CLASS_BE, ceph_ioprio_string_to_class("be"));
ASSERT_EQ(IOPRIO_CLASS_BE, ceph_ioprio_string_to_class("BE"));
ASSERT_EQ(IOPRIO_CLASS_BE, ceph_ioprio_string_to_class("besteffort"));
ASSERT_EQ(IOPRIO_CLASS_BE, ceph_ioprio_string_to_class("BESTEFFORT"));
ASSERT_EQ(IOPRIO_CLASS_BE, ceph_ioprio_string_to_class("best effort"));
ASSERT_EQ(IOPRIO_CLASS_BE, ceph_ioprio_string_to_class("BEST EFFORT"));

ASSERT_EQ(IOPRIO_CLASS_RT, ceph_ioprio_string_to_class("rt"));
ASSERT_EQ(IOPRIO_CLASS_RT, ceph_ioprio_string_to_class("RT"));
ASSERT_EQ(IOPRIO_CLASS_RT, ceph_ioprio_string_to_class("realtime"));
ASSERT_EQ(IOPRIO_CLASS_RT, ceph_ioprio_string_to_class("REALTIME"));
ASSERT_EQ(IOPRIO_CLASS_RT, ceph_ioprio_string_to_class("real time"));
ASSERT_EQ(IOPRIO_CLASS_RT, ceph_ioprio_string_to_class("REAL TIME"));

ASSERT_EQ(-EINVAL, ceph_ioprio_string_to_class("invalid"));
}

/*
* Local Variables:
* compile-command: "cd ../.. ;
* make -j4 unittest_io_priority &&
* libtool --mode=execute valgrind --tool=memcheck --leak-check=full \
* ./unittest_io_priority
* "
* End:
*/

0 comments on commit 86926c6

Please sign in to comment.