File: plugin_testing_common.h

package info (click to toggle)
trafficserver 9.2.5%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 53,008 kB
  • sloc: cpp: 345,484; ansic: 31,134; python: 24,200; sh: 7,271; makefile: 3,045; perl: 2,261; java: 277; pascal: 119; sql: 94; xml: 2
file content (107 lines) | stat: -rw-r--r-- 4,423 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/** @file

  A test plugin header for testing Plugin's Dynamic Shared Objects (DSO)

  @section license License

  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

  @section details Details

  Implements code necessary for Reverse Proxy which mostly consists of
  general purpose hostname substitution in URLs.

 */

#pragma once

#include <map>
#include <string>
#include <iostream>

#include <stdio.h>
#include <stdarg.h>

#include "../PluginFactory.h"

extern thread_local PluginThreadContext *pluginThreadContext;

/* A temp sandbox to play with our toys used for all fun with this test-bench */
fs::path getTemporaryDir();

class PluginDebugObject
{
public:
  PluginDebugObject() { clear(); }

  void
  clear()
  {
    contextInit            = nullptr;
    contextInitInstance    = nullptr;
    doRemapCalled          = 0;
    initCalled             = 0;
    doneCalled             = 0;
    initInstanceCalled     = 0;
    deleteInstanceCalled   = 0;
    preReloadConfigCalled  = 0;
    postReloadConfigCalled = 0;
    postReloadConfigStatus = TSREMAP_CONFIG_RELOAD_FAILURE;
    ih                     = nullptr;
    argc                   = 0;
    argv                   = nullptr;
  }

  /* Input fields used to set the test behavior of the plugin call-backs */
  bool fail = false; /* tell the plugin call-back to fail for testing purposuses */
  void *input_ih;    /* the value to be returned by the plugin instance init function */

  /* Output fields showing what happend during the test */
  const PluginThreadContext *contextInit         = nullptr;                   /* plugin initialization context */
  const PluginThreadContext *contextInitInstance = nullptr;                   /* plugin instance initialization context */
  int doRemapCalled                              = 0;                         /* mark if remap was called */
  int initCalled                                 = 0;                         /* mark if plugin init was called */
  int doneCalled                                 = 0;                         /* mark if done was called */
  int initInstanceCalled                         = 0;                         /* mark if instance init was called */
  int deleteInstanceCalled                       = 0;                         /* mark if delete instance was called */
  int preReloadConfigCalled                      = 0;                         /* mark if pre-reload config was called */
  int postReloadConfigCalled                     = 0;                         /* mark if post-reload config was called */
  TSRemapReloadStatus postReloadConfigStatus = TSREMAP_CONFIG_RELOAD_FAILURE; /* mark if plugin reload status is passed correctly */
  void *ih                                   = nullptr;                       /* instance handler */
  int argc                                   = 0;       /* number of plugin instance parameters received by the plugin */
  char **argv                                = nullptr; /* plugin instance parameters received by the plugin */
};

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

typedef void *GetPluginDebugObjectFunction(void);
GetPluginDebugObjectFunction getPluginDebugObjectTest;

#define PluginDebug(category, fmt, ...) \
  PrintToStdErr("(%s) %s:%d:%s() " fmt "\n", category, __FILE__, __LINE__, __func__, ##__VA_ARGS__)
#define PluginError(fmt, ...) PrintToStdErr("%s:%d:%s() " fmt "\n", __FILE__, __LINE__, __func__, ##__VA_ARGS__)
void PrintToStdErr(const char *fmt, ...);

#ifdef __cplusplus
}
#endif /* __cplusplus */

// functions to support unit-testing of option to enable/disable dynamic reload of plugins
void enablePluginDynamicReload();
void disablePluginDynamicReload();