blob: 06c17c2cfdfcefd1c1e33f05bf8b0c73b5c92989 [file] [log] [blame]
# ==================================================================================
# Copyright (c) 2019-2020 Nokia
# Copyright (c) 2018-2020 AT&T Intellectual Property.
#
# Licensed 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.
# ==================================================================================
"""
tests data functions
"""
import time
from ricxappframe.xapp_sdl import SDLWrapper
NS = "testns"
def test_sdl():
"""
test raw sdl functions
"""
sdl = SDLWrapper(use_fake_sdl=True)
sdl.set(NS, "as.df1", "data")
sdl.set(NS, "as.df2", "data2")
assert sdl.get(NS, "as.df1") == "data"
assert sdl.get(NS, "as.df2") == "data2"
assert sdl.find_and_get(NS, "as.df1") == {"as.df1": "data"}
assert sdl.find_and_get(NS, "as.df2") == {"as.df2": "data2"}
assert sdl.find_and_get(NS, "as.df") == {"as.df1": "data", "as.df2": "data2"}
assert sdl.find_and_get(NS, "as.d") == {"as.df1": "data", "as.df2": "data2"}
assert sdl.find_and_get(NS, "as.") == {"as.df1": "data", "as.df2": "data2"}
assert sdl.find_and_get(NS, "asd") == {}
# delete 1
sdl.delete(NS, "as.df1")
assert sdl.get(NS, "as.df1") is None
assert sdl.get(NS, "as.df2") == "data2"
# delete 2
sdl.delete(NS, "as.df2")
assert sdl.get(NS, "as.df2") is None
assert sdl.find_and_get(NS, "as.df") == {}
assert sdl.find_and_get(NS, "") == {}
def test_sdl_set_get():
"""
test set, get realted sdl methods
"""
sdl = SDLWrapper(use_fake_sdl=True)
# set_if
sdl.set(NS, "gs.df1", "old")
assert sdl.get(NS, "gs.df1") == "old"
sdl.set_if(NS, "gs.df1", "young", "new")
assert sdl.get(NS, "gs.df1") == "old"
sdl.set_if(NS, "gs.df1", "old", "new")
assert sdl.get(NS, "gs.df1") == "new"
# set_if_not_exists
sdl.set(NS, "gs.df2", "old")
assert sdl.get(NS, "gs.df2") == "old"
sdl.set_if_not_exists(NS, "gs.df2", "new")
assert sdl.get(NS, "gs.df2") == "old"
sdl.set_if_not_exists(NS, "gs.df3", "new")
assert sdl.get(NS, "gs.df3") == "new"
# find_keys
assert sdl.find_keys(NS, "gs") == ["gs.df1", "gs.df2", "gs.df3"]
assert sdl.find_keys(NS, "gs.df1") == ["gs.df1"]
assert sdl.find_keys(NS, "gs.df2") == ["gs.df2"]
assert sdl.find_keys(NS, "gs.df3") == ["gs.df3"]
# delete_if
sdl.set(NS, "gs.df4", "delete_this")
assert sdl.delete_if(NS, "gs.df4", "delete") is False
assert sdl.delete_if(NS, "gs.df4", "delete_this") is True
assert sdl.get(NS, "gs.df4") is None
def test_sdl_member():
"""
test member related sdl methods
"""
# add_member, remove_member, get_members
sdl = SDLWrapper(use_fake_sdl=True)
sdl.add_member(NS, "group1", "member1")
assert sdl.is_member(NS, "group1", "member1") is True
sdl.remove_member(NS, "group1", "not_member")
assert sdl.is_member(NS, "group1", "member1") is True
sdl.remove_member(NS, "group1", "member1")
assert sdl.is_member(NS, "group1", "member1") is False
# remove_group, group_size
sdl.add_member(NS, "group2", "member1")
sdl.add_member(NS, "group2", "member2")
assert sdl.group_size(NS, "group2") == 2
sdl.remove_group(NS, "group2")
assert sdl.group_size(NS, "group2") == 0
# get_members
sdl.add_member(NS, "group3", "member1")
sdl.add_member(NS, "group3", "member2")
members = sdl.get_members(NS, "group3")
assert "member1" in members
assert "member2" in members
def test_sdl_set_and_publish_with_handle_events():
"""
test set_and_publish* related sdl methods
"""
CH = "channel"
EVENT = "event"
CALLED = None
def cb(channel, event):
nonlocal CH
nonlocal EVENT
nonlocal CALLED
# test is cb called
CALLED = True
assert channel == CH
assert event == EVENT
sdl = SDLWrapper(use_fake_sdl=True)
sdl.subscribe_channel(NS, cb, "channel")
# set_and_publish
CALLED = False
sdl.set_and_publish(NS, "channel", "event", "nt.df1", "old")
sdl.handle_events()
assert sdl.get(NS, "nt.df1") == "old"
assert CALLED is True
# set_if_and_publish fail
CALLED = False
sdl.set_if_and_publish(NS, "channel", "event", "nt.df1", "young", "new")
sdl.handle_events()
assert sdl.get(NS, "nt.df1") == "old"
assert CALLED is False
# set_if_and_publish success
sdl.set_if_and_publish(NS, "channel", "event", "nt.df1", "old", "new")
sdl.handle_events()
assert sdl.get(NS, "nt.df1") == "new"
assert CALLED is True
# set_if_not_exists_and_publish fail
CALLED = False
sdl.set_if_not_exists_and_publish(NS, "channel", "event", "nt.df1", "latest")
sdl.handle_events()
assert sdl.get(NS, "nt.df1") == "new"
assert CALLED is False
# set_if_not_exists_and_publish success
sdl.set_if_not_exists_and_publish(
NS, "channel", "event", "nt.df2", "latest")
sdl.handle_events()
assert sdl.get(NS, "nt.df2") == "latest"
assert CALLED is True
sdl.unsubscribe_channel(NS, "channel")
def test_sdl_remove_and_publish_with_start_event_listener():
"""
test remove_and_publish* related sdl methods
"""
CH = "channel"
EVENT = "event"
CALLED = None
def cb(channel, event):
nonlocal CH
nonlocal EVENT
nonlocal CALLED
CALLED = True
assert channel == CH
assert event == EVENT
sdl = SDLWrapper(use_fake_sdl=True)
sdl.subscribe_channel(NS, cb, "channel")
sdl.start_event_listener()
# remove_and_publish success
CALLED = False
sdl.set(NS, "nt.df1", "old")
sdl.remove_and_publish(NS, "channel", "event", "nt.df1")
time.sleep(0.3)
assert sdl.get(NS, "nt.df1") is None
assert CALLED is True
# remove_if_and_publish
CALLED = False
sdl.set(NS, "nt.df1", "old")
# fail
sdl.remove_if_and_publish(NS, "channel", "event", "nt.df1", "new")
time.sleep(0.3)
assert sdl.get(NS, "nt.df1") == "old"
assert CALLED is False
# success
sdl.remove_if_and_publish(NS, "channel", "event", "nt.df1", "old")
time.sleep(0.3)
assert sdl.get(NS, "nt.df1") is None
assert CALLED is True
# remove_all_and_publish
CALLED = False
sdl.set(NS, "nt.df1", "data1")
sdl.set(NS, "nt.df2", "data2")
sdl.set(NS, "nt.df3", "data3")
sdl.remove_all_and_publish(NS, "channel", "event")
time.sleep(0.3)
assert sdl.get(NS, "nt.df1") is None
assert sdl.get(NS, "nt.df2") is None
assert sdl.get(NS, "nt.df3") is None
assert sdl.find_keys(NS, "*") == []
assert CALLED is True
sdl.unsubscribe_channel(NS, "channel")