Merge branch '3.0' of https://github.com/taosdata/TDengine into feature/vnode
This commit is contained in:
commit
32d2b1cc65
|
@ -49,7 +49,7 @@ int main(int argc, char** argv) {
|
|||
TEST(testCase, driverInit_Test) { taos_init(); }
|
||||
|
||||
TEST(testCase, connect_Test) {
|
||||
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
|
||||
TAOS* pConn = taos_connect("localhost", "root", "taosdata", "abc1", 0);
|
||||
if (pConn == NULL) {
|
||||
printf("failed to connect to server, reason:%s\n", taos_errstr(NULL));
|
||||
}
|
||||
|
|
|
@ -30,7 +30,8 @@ static void copyString(const cJSON* json, const char* name, char* dst) {
|
|||
}
|
||||
|
||||
static int64_t getNumber(const cJSON* json, const char* name) {
|
||||
return cJSON_GetNumberValue(cJSON_GetObjectItem(json, name));
|
||||
double d = cJSON_GetNumberValue(cJSON_GetObjectItem(json, name));
|
||||
return (int64_t) d;
|
||||
}
|
||||
|
||||
static bool addObject(cJSON* json, const char* name, FToJson func, const void* obj) {
|
||||
|
@ -541,17 +542,27 @@ static const char* jkTimeWindowEndKey = "EndKey";
|
|||
|
||||
static bool timeWindowToJson(const void* obj, cJSON* json) {
|
||||
const STimeWindow* win = (const STimeWindow*)obj;
|
||||
bool res = cJSON_AddNumberToObject(json, jkTimeWindowStartKey, win->skey);
|
||||
|
||||
char tmp[32] = {0};
|
||||
sprintf(tmp, "%"PRId64, win->skey);
|
||||
|
||||
bool res = cJSON_AddStringToObject(json, jkTimeWindowStartKey, tmp);
|
||||
if (res) {
|
||||
res = cJSON_AddNumberToObject(json, jkTimeWindowEndKey, win->ekey);
|
||||
memset(tmp, 0, tListLen(tmp));
|
||||
sprintf(tmp, "%"PRId64, win->ekey);
|
||||
res = cJSON_AddStringToObject(json, jkTimeWindowEndKey, tmp);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static bool timeWindowFromJson(const cJSON* json, void* obj) {
|
||||
STimeWindow* win = (STimeWindow*)obj;
|
||||
win->skey = getNumber(json, jkTimeWindowStartKey);
|
||||
win->ekey = getNumber(json, jkTimeWindowEndKey);
|
||||
|
||||
char* p = getString(json, jkTimeWindowStartKey);
|
||||
win->skey = strtoll(p, NULL, 10);
|
||||
|
||||
p = getString(json, jkTimeWindowEndKey);
|
||||
win->ekey = strtoll(p, NULL, 10);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1262,6 +1262,7 @@ int32_t qWorkerProcessQueryMsg(void *node, void *qWorkerMgmt, SRpcMsg *pMsg) {
|
|||
}
|
||||
|
||||
QW_ERR_JRET(qwAddTask(qWorkerMgmt, sId, qId, tId, JOB_TASK_STATUS_EXECUTING));
|
||||
QW_DLOG("query task received, reqId:0x%"PRIx64", physical plan:%s", qId, msg->msg);
|
||||
|
||||
code = qStringToSubplan(msg->msg, &plan);
|
||||
if (TSDB_CODE_SUCCESS != code) {
|
||||
|
|
|
@ -13,23 +13,126 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifdef USE_UV
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <chrono>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include "transportInt.h"
|
||||
#include "trpc.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main() {
|
||||
SRpcInit init = {.localPort = 6030, .label = "rpc", .numOfThreads = 5};
|
||||
void* p = rpcOpen(&init);
|
||||
struct QueueElem {
|
||||
queue q;
|
||||
int val;
|
||||
};
|
||||
class QueueObj {
|
||||
public:
|
||||
QueueObj() {
|
||||
// avoid formate
|
||||
QUEUE_INIT(&head);
|
||||
}
|
||||
void Push(QueueElem *el) {
|
||||
// avoid formate
|
||||
QUEUE_PUSH(&head, &el->q);
|
||||
}
|
||||
QueueElem *Pop() {
|
||||
QueueElem *el = NULL;
|
||||
if (!IsEmpty()) {
|
||||
queue *h = QUEUE_HEAD(&head);
|
||||
el = QUEUE_DATA(h, QueueElem, q);
|
||||
QUEUE_REMOVE(&el->q);
|
||||
}
|
||||
return el;
|
||||
}
|
||||
bool IsEmpty() {
|
||||
// avoid formate
|
||||
return QUEUE_IS_EMPTY(&head);
|
||||
}
|
||||
void RmElem(QueueElem *el) {
|
||||
// impl
|
||||
QUEUE_REMOVE(&el->q);
|
||||
}
|
||||
void ForEach(std::vector<int> &result) {
|
||||
queue *h;
|
||||
QUEUE_FOREACH(h, &head) {
|
||||
// add more
|
||||
QueueElem *el = QUEUE_DATA(h, QueueElem, q);
|
||||
result.push_back(el->val);
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
std::cout << "cron task" << std::endl;
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(10 * 1000));
|
||||
private:
|
||||
queue head;
|
||||
};
|
||||
|
||||
class QueueEnv : public ::testing::Test {
|
||||
protected:
|
||||
virtual void SetUp() {
|
||||
// TODO
|
||||
q = new QueueObj();
|
||||
}
|
||||
virtual void TearDown() {
|
||||
delete q;
|
||||
// formate
|
||||
}
|
||||
QueueObj *q;
|
||||
};
|
||||
|
||||
TEST_F(QueueEnv, testPushAndPop) {
|
||||
// add more test
|
||||
assert(q->IsEmpty());
|
||||
|
||||
for (int i = 0; i < 100; i++) {
|
||||
QueueElem *el = (QueueElem *)malloc(sizeof(QueueElem));
|
||||
el->val = i;
|
||||
q->Push(el);
|
||||
}
|
||||
int i = 0;
|
||||
while (!q->IsEmpty()) {
|
||||
QueueElem *el = q->Pop();
|
||||
assert(el->val == i++);
|
||||
free(el);
|
||||
}
|
||||
assert(q->IsEmpty());
|
||||
}
|
||||
TEST_F(QueueEnv, testRm) {
|
||||
// add more test
|
||||
|
||||
std::vector<QueueElem *> set;
|
||||
assert(q->IsEmpty());
|
||||
|
||||
for (int i = 0; i < 100; i++) {
|
||||
QueueElem *el = (QueueElem *)malloc(sizeof(QueueElem));
|
||||
el->val = i;
|
||||
q->Push(el);
|
||||
set.push_back(el);
|
||||
}
|
||||
for (int i = set.size() - 1; i >= 0; i--) {
|
||||
QueueElem *el = set[i];
|
||||
q->RmElem(el);
|
||||
free(el);
|
||||
}
|
||||
assert(q->IsEmpty());
|
||||
}
|
||||
TEST_F(QueueEnv, testIter) {
|
||||
// add more test
|
||||
assert(q->IsEmpty());
|
||||
std::vector<int> vals;
|
||||
for (int i = 0; i < 100; i++) {
|
||||
QueueElem *el = (QueueElem *)malloc(sizeof(QueueElem));
|
||||
el->val = i;
|
||||
q->Push(el);
|
||||
vals.push_back(i);
|
||||
}
|
||||
std::vector<int> result;
|
||||
q->ForEach(result);
|
||||
assert(result.size() == vals.size());
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue