/// <summary> /// Checks plugin dependecies /// </summary> /// <param name="plugin">Plugin to check</param> /// <returns>True if ok</returns> public bool CheckPluginDependecies(Plugin plugin) { if (plugin.Dependencies != null) { foreach (PluginConfig dep in plugin.Dependencies) { Plugin depPlugin = null; if (!ContainsPlugin(dep, out depPlugin)) { string msg = "Plugin [" + plugin.Config + "] definition in XML file is invalid. Dependency plugin [" + dep + "] is missing."; InvalidPluginException ex = new InvalidPluginException(msg); ex.Plugin = plugin.Config; throw ex; } else if (!depPlugin.Enabled) { string msg = "Plugin [" + plugin.Config + "] definition in XML file is invalid. Dependency plugin [" + dep + "] is disable."; InvalidPluginException ex = new InvalidPluginException(msg); ex.Plugin = plugin.Config; throw ex; } } } return(true); }
public static void InvalidPluginException() => Describe(nameof(InvalidPluginException), () => { const string message = "Invalid Load"; var attribute = new TastyPluginAttribute(typeof(InvalidPluginExceptionTests), nameof(InvalidPluginException)); var exception = new InvalidPluginException(message, attribute, new Exception()); It($"should provide {nameof(exception.TastyPluginType)}", () => exception.TastyPluginType == typeof(InvalidPluginExceptionTests).FullName ); It($"should provide {nameof(exception.TastyPluginEntryPoint)}", () => exception.TastyPluginEntryPoint == nameof(InvalidPluginException) ); Describe("should serialize and keep context", () => { var serializedException = DeserializeFromBytes(SerializeToBytes(exception)); It($"should provide {nameof(exception.TastyPluginType)}", () => serializedException.TastyPluginType == typeof(InvalidPluginExceptionTests).FullName ); It($"should provide {nameof(exception.TastyPluginEntryPoint)}", () => serializedException.TastyPluginEntryPoint == nameof(InvalidPluginException) ); }); Describe($"throws {nameof(ArgumentNullException)}", () => { It($"for {nameof(TastyPluginAttribute)}", () => Should.Throw <ArgumentNullException>( () => new InvalidPluginException(string.Empty, null !, null !) ) );
/// <summary> /// Check plugin /// </summary> /// <param name="plugin">Plugin to check</param> /// <returns>True if ok</returns> public bool CheckPlugin(Plugin plugin) { if (plugins.Contains(plugin)) { InvalidPluginException ex = new InvalidPluginException("There is multiple plugin [" + plugin + "]"); ex.Plugin = plugin.Config; throw ex; } return(true); }
public static Plugin Read(string fileName) { XmlDocument doc = new XmlDocument(); try { doc.Load(fileName); } catch (Exception) { InvalidPluginException e = new InvalidPluginException("Error while parsing plugin file: " + fileName); throw e; } XmlNode pluginNode = doc.GetElementsByTagName("Plugin").Item(0); if (pluginNode == null) { InvalidPluginException e = new InvalidPluginException("There is no plugin definition in file: " + fileName); throw e; } XStream xs = new XStream(); xs.Alias("Plugin", typeof(PluginConfig)); PluginConfig pluginXML = null; try { pluginXML = xs.FromXml(pluginNode.OuterXml) as PluginConfig; } catch (Exception) { InvalidPluginException e = new InvalidPluginException("Wrong plugin definition in file: " + fileName); throw e; } try { pluginXML.Valid(); } catch (InvalidPluginException ex) { InvalidPluginException e = new InvalidPluginException(ex.Message + " in file: " + fileName, ex); e.Plugin = pluginXML; throw e; } Plugin plugin = new Plugin(pluginXML); plugin.Xml = pluginNode.OuterXml; return(plugin); }
public bool Valid(bool isDependency = false) { if (string.IsNullOrEmpty(Id)) { string msg = "Plugin definition in XML file is invalid. There is no Id"; if (isDependency) { msg += " for dependency"; } InvalidPluginException ex = new InvalidPluginException(msg); ex.Plugin = this; throw ex; } if (string.IsNullOrEmpty(Version)) { string msg = "Plugin definition in XML file is invalid. There is no Version"; if (isDependency) { msg += " for dependency"; } InvalidPluginException ex = new InvalidPluginException(msg); ex.Plugin = this; throw ex; } if (!isDependency && string.IsNullOrEmpty(File)) { InvalidPluginException ex = new InvalidPluginException("Plugin definition in XML file is invalid. There is no File"); ex.Plugin = this; throw ex; } if (Dependencies != null) { foreach (PluginConfig plugin in Dependencies) { if (!plugin.Valid(true)) { return(false); } } } return(true); }