Testing Framework

MockFogLoad allows application developers to specify test cases which will be excuted by the orchestrator. The tests are separated into stages, each stage has a time in seconds associated with it. The execution timing on the Fog Nodes and generators will be exact. The testfiles have to be provided to the orchestrator in a YAML format.

The mapping of Node ids to IP addresses has to be provided in a map file.

Example Test

The following YAML is an example test. It will set the bandwith on the interface docker0 on nodes with ids application_layer1_1 and generator1 to 1gbps. It will also spawn a heartrate generator on generator1 with the given configuration:

testName: HeartRate
stages:
- id: 1
    time: 1
    node:
    - id: application_layer1_1
        interfaces:
        - id: docker0
            bandwidth: 1gbps

    - id: generator1
        interfaces:
        - id: docker0
            bandwidth: 1gbps

    - id: generator1
        generators:
        - id: HR1
            kind: HeartRate
            events_per_second: 30
            endpoint: application_layer1_1
            endpoint_port: 30444
            active: true
            format_string: '{"source":"peter","time":${timestamp},"value":${heartRate},"type":"heartRate"}'
            protocol: HTTP
            seed: 30

The mapping of the nodes to IPs for this case would look like this:

nodes:
- id: application_layer1_1
  ip: 0.0.0.0
- id: generator1
  ip: 0.0.0.0

Testing Parameters

The following parameters can be specified by applications for testing:

  • testName: The name of the test.
  • stages: A list of stages the test is supposed to go through.
    • id: ID of the stage.
    • time: After what time interval (in seconds) the changes should occur.
    • node: A list of fog nodes on which the changes should occur on.
      • id: ID of the node, can be all to select all fog nodes.
      • interface(optional): A list of interfaces.
        • id: ID of the interface, can be all to select all interfaces on a given node.
        • active: Status of the interface, can be either true or false.
        • bandwidth:(optional) Maximum available throughput of the interface.
        • delay(optional): Set a delay in ms
        • loss(optional): Set a percentage of how many packets get dropped
      • app(optional): A list of containers.
        • id: Name of the container to be configured.
        • cpu(optional): Set CPU shares.
        • memory(optional): Set maximum available memory.
      • generators(optional): A list of generators running on the node.
        • id: ID of the generator, can be all to select all generators running on a given node.
        • kind(optional): Set the type of generator.
        • frequency(optional): Set the frequency of how often the generator should send out data (milliseconds between generated datapoints). Default: 100.
        • events_per_second(optional): Alternative way of specifying the generator’s frequency.
        • granularity(optional): Set the amount of simulated time that passes between generated events (milliseconds). Default: 1000.
        • seconds_between_datapoints(optional): Alternative way of specifying the generator’s granularity.
        • date(optional): The start date of the generated data. Default: Now.
        • active(optional): Turn the generator off or on entirely.
        • endpoint(optional): ID of a fog node to which the generator should send its data.
        • endpoint_port(optional): Port of the remote to which the generator will send its data.
        • seed(optional): Restart the generator with a new specified seed.
        • format_string(optional): Format in which the generator will send data.
        • protocol(optional): Which transport protocol should be used for communication. Can be UDP, CoAP or HTTP. Default: HTTP.