1. 外部参数输入解析

目的:观察从终端输入的外部参数信息是否能够正确读取并且录入。

1.1 调用如下

  1. static kit_server::Logger::ptr g_logger = KIT_LOG_ROOT();
  2. void test_env(int argc, char *argv[])
  3. {
  4. kit_server::Env* env = kit_server::EnvMgr::GetInstance();
  5. if(!env->init(argc, argv))
  6. {
  7. KIT_LOG_ERROR(g_logger) << "args parser error!";
  8. return;
  9. }
  10. env->add("a", "6666");
  11. env->add("c", "8888");
  12. //env->del("b");
  13. env->addHelp("a", "hello");
  14. env->addHelp("b", "ahhahah");
  15. env->addHelp("c", "651651");
  16. env->printHelp();
  17. //env->delHelp("c");
  18. env->del("c");
  19. if(env->has("a"))
  20. {std::cout << "a存在" << std::endl;}
  21. else
  22. {std::cout << "a不存在" << std::endl;}
  23. if(env->has("b"))
  24. {std::cout << "b存在" << std::endl;}
  25. else
  26. {std::cout << "b不存在" << std::endl;}
  27. if(env->has("c"))
  28. {std::cout << "c存在" << std::endl;}
  29. else
  30. {std::cout << "c不存在" << std::endl;}
  31. if(env->has("p"))
  32. {std::cout << "p存在" << std::endl;}
  33. else
  34. {std::cout << "p不存在" << std::endl;}
  35. env->printHelp();
  36. }
  37. int main(int argc, char *argv[])
  38. {
  39. KIT_LOG_INFO(g_logger) << "test begin";
  40. test_env(argc, argv);
  41. KIT_LOG_INFO(g_logger) << "test end";
  42. return 0;
  43. }

$ bin/test_env -b
image.png

BUG:外部传入参数没有被正确读取解析

预期的效果能够处理以下几种情况:

  1. -key1 val -key2
  2. -key1 -key2 val
  3. -key1 -key2
  4. -key

上述测试结果可以看到 4. 的情况就没能正确处理。init()解析部分不正确,重新修改

1.2 修正后调用如下

  • 调用测试代码不变。可以看到已经能够正确读取-b参数

$ bin/test_env -b
image.png

  • 调用测试代码不变。继续测试其他几种排列情况

$ bin/test_env -b 0000 -p
image.png
$ bin/test_env -b -p 0000
image.png
$ bin/test_env -b -p
image.png

2. 预加载配置文件.yaml

目的:能否从外部提供一个文件夹的相对路径/绝对路径下加载全部的配置文件.yaml。没有修改过的配置文件不予以进行加载。

2.1 调用如下

  • tests/test_config.cpp文件中: ```cpp

    include “../kit_server/Log.h”

    include “../kit_server/config.h”

    include “../kit_server/env.h”

void test_loadconf() { kit_server::Config::LoadFromConfigDir(“conf”); }

int main(int argc, char argv[]) { kit_server::Env env = kit_server::EnvMgr::GetInstance(); if(!env->init(argc, argv)) { KIT_LOG_ERROR(g_logger) << “args init fail!”; return 0; }

  1. test_loadconf();
  2. return 0;

}

  1. `bin/conf`路径下只放了一个`test.yaml`文件,已经成功加载;并且在`bin/conf`下再放一个文件夹`xxx``bin/conf/xxx`下再放一个同样的`test.yaml`文件,也成功加载。<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/25460685/1644237731938-3036933b-0b6a-4fe9-8f80-e4b3a8eb3006.png#clientId=uac22a05d-0122-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=92&id=u01f9588a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=92&originWidth=1387&originalType=binary&ratio=1&rotation=0&showTitle=false&size=23971&status=done&style=none&taskId=ucebc8370-09dc-4e64-963d-dadd6f56f07&title=&width=1387)
  2. - 测试没有修改过的配置文件是否也会加载。连续调用两次加载的接口。
  3. ```cpp
  4. void test_loadconf()
  5. {
  6. kit_server::Config::LoadFromConfigDir("conf");
  7. std::cout << "------------------------" << std::endl;
  8. kit_server::Config::LoadFromConfigDir("conf");
  9. }
  10. int main(int argc, char* argv[])
  11. {
  12. kit_server::Env* env = kit_server::EnvMgr::GetInstance();
  13. if(!env->init(argc, argv))
  14. {
  15. KIT_LOG_ERROR(g_logger) << "args init fail!";
  16. return 0;
  17. }
  18. test_loadconf();
  19. return 0;
  20. }

image.png